草庐IT

CHAR_BIT

全部标签

c++ - 从另一个函数获取 char[] 的方法很好。开始用 c/c++ 思考

据我了解,正确的编程风格告诉我们,如果您想从另一个函数获取字符串(char[]),最好由调用者创建char*并将其与创建的字符串长度一起传递给字符串格式化函数。在我的例子中,字符串格式化函数是“getss”。voidgetss(char*ss,int&l){sprintf(ss,"aaaaaaaaaa%d",1);l=11;}int_tmain(intargc,_TCHAR*argv[]){char*f=newchar[1];intl=0;getss(f,l);cout>d;return0;}"getss"格式化字符串并将其返回给ss*。我认为getss不允许获得调用者创建的外部字符串

c++ - boost::optional<std::string> 和来自 char[] 的隐式构造函数

我已经习惯了通过让编译器找出所涉及的魔法来以下列方式初始化std::stringsstd::stringmy_string="hello";以下将不起作用,因为两种类型之间没有显式转换:boost::optionalmy_optional_string="hello";但这确实有效:boost::optionalmy_optional_string=std::string("hello");现在,难道没有办法菊花链隐式调用的单参数构造函数以允许第二种形式吗?我问的原因(虽然我不想用细节打扰你)是有一大堆类需要填充可选成员。必须显式输入所有内容似乎是一种负担(我不太担心自己,但我正在开发

c++ - 将 "unsigned char"传递给需要 char 或 const char* 的重载函数会导致歧义

我正在使用QByteArray来存储原始二进制数据。为了存储数据,我使用了QByteArray的附加函数。我喜欢使用无符号字符来表示字节,因为我认为255比-1更容易解释。但是,当我尝试将零值字节附加到QByteArray时,如下所示:command.append((unsignedchar)0x00));编译器提示重载append(unsignedchar)的调用不明确。据我了解,这是因为零可以解释为空指针,但是为什么编译器不将unsignedchar视为char,而不是想知道它是否是constchar*?当然,如果编译器在没有任何转换的情况下提示command.append(0),

c++ - C++ 容器内的 char* 作用域

具有以下内容:#includestd::setglobal=std::set();voidx(){constchar*c="a";constchar*d="b";global.insert(c);global.insert(d);}intmain(){x();for(std::set::const_iteratoriter=global.begin(),end=global.end();iter!=end;++iter){printf("%s\n",*iter);}return0;}最后,正如预期的那样,我收到打印的a和b。然而,是否有任何保证,例如,如果该集合是bozo对象的一部分,

c++ - 将 uint16_t 和 char* 与 QMetaObject::invokeMethod() 一起使用

我想使用QMetaObject::invokeMethod()从不同线程异步调用槽包含插槽的类声明为:classPaintable:publicQObject{Q_OBJECT[...]publicslots:voiddrawString(uint16_tx,uint16_ty,uint16_tsize,constchar*str,colorc);}调用invokeMethod的方法定义为:voiddrawStringAsynchronously(uint16_tx,uint16_ty,uint16_tsize,constchar*str,colorc){QMetaObject::in

c++ - 在 C++11 标准中哪里说 char* p = "abc";是病态的?

在C++11标准中哪里说char*p="abc";格式错误? 最佳答案 这在C++03中仍然有效(尽管已弃用),但在C++11中情况发生了变化。C++11标准的附件C提到(参见C1.1):Change:StringliteralsmadeconstThetypeofastringliteralischangedfrom“arrayofchar”to“arrayofconstchar.”Thetypeofachar16_tstringliteralischangedfrom“arrayofsome-integer-type”to“ar

c++ - 如何从 vector<char> 复制一个整数

我现在正在处理wav文件,我正在尝试解析它们。我暂时不想使用图书馆。我用fstream打开wav文件并将所有数据读取到vector。现在我想解析wav文件头。例如,我想获取第4到第8个字节之间的文件大小。我想将其分配给一个整数。我会用memcpy轻松完成此操作。但是因为它是C++,所以我不想使用memcpy。我最终得到的解决方案:std::vector::iteratorvectorIte=soundFileDataVec.begin();vawParams.totalfilesize=0;//SinceitislittleendianIusedreverse_copystd::rev

c++ - 使用基于范围的 For 循环和 Char 指针字符串

这个问题在这里已经有了答案:Rangebasedforloopsonnullterminatedstrings(3个答案)关闭9年前。我是C++11的新手,坦率地说,我已经一年多没用过C++,所以一开始我有点生疏。我正在根据旧的大学教科书做一些练习,在尝试迭代char指针字符串时遇到了问题(例如:char*c="astring";)。我在谷歌上找不到任何有用的东西。我已经习惯了Java,其中foreach循环可以遍历任何集合。我知道指针是如何工作的,但是我从C++休假让我对实际使用它们的语法一无所知。谁能告诉我为什么以下代码(特别是convert()函数)会导致编译错误,其中“开始”和

c++ - 如何将 unsigned char 数组转换为 unsigned long long?

假设我有8个unsignedchar,我想将其转换为unsignedlonglong。例如,如果所有char都等于0xFF,则unsignedlonglong将等于0xFFFFFFFFFFFFFFFF。使用C或C++最有效的方法是什么? 最佳答案 例如:unsignedcharbuffer[8]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};unsignedlonglongtarget;memcpy(&target,buffer,sizeoftarget);请注意,如果buffer的所有元素并非

c++ - 奇怪的错误 char 的加密 (ascii)

这是一个简单的代码,但我无法理解一个奇怪的事件。代码:voidCrittografia::CifraTesto(chartext[]){inti;for(i=0;i'z'){text[i]=text[i]-26;}}}函数接收此处输入的字符串:Itworks.在这种情况下,它使用key5。“y”在“d”中正确更改。但在这种情况下:Doesn'twork.键值为7时,它会更改'Ç'中的'y'而不是正确的'f',因此显然不会执行该行:“text[i]=text[i]-26;” 最佳答案 text[i]=text[i]+key;当key为