草庐IT

c++ - 在 C++ 中使用按位运算符将 4 个字符更改为 int

我必须做的是以二进制模式打开一个文件,其中包含旨在解释为整数的存储数据。我见过其他例子,例如Stackoverflow-Reading“integer”sizebytesfromachar*array.但我想尝试采取不同的方法(我可能只是固执或愚蠢:/)。我首先在十六进制编辑器中创建了一个简单的二进制文件,内容如下。000000470000001700000041如果将12个字节分成3个整数,这(应该)等于71、23和65。以二进制模式打开此文件并将4个字节读入char数组后,如何使用按位运算使char[0]位成为int的前8位,依此类推,直到每个char的位是int的一部分。Myin

c++ - 错误 :incompatible types in assignment of 'const char[5]' to 'char[10]'

我已经将c定义为charc[][10]在函数定义中并像c[i]="gray";一样使用它怎么了?我在网上搜索,它显示相同的语法。谢谢。 最佳答案 您不能对数组使用赋值(=)。如果将c更改为指针数组,这可能会起作用,具体取决于您需要使用它做什么。constchar*c[20];c[i]="gray";或者如果声明的类型必须是数组的数组,您可以使用strncpy:charc[20][10];strncpy(c[i],"gray",sizeof(c[i])); 关于c++-错误:incompa

c++ - 低级 C/C++ 性能?

更新:如果代码:我刚刚成功击败了自己的32:voidtest(char*file_char,unsignedintsize){char*file_=file_char;char*size_x=file_char+size;charto_find=0;for(unsignedinti=0;i上面的代码要求0在数组中至少出现一次,否则会出现错误,但它比if代码快一点,而且更紧凑。有没有办法让上面的代码更快?(有一个char数组并试图找到一个char出现的位置)?我写了一些代码,我真的很困惑。初始化:intmain(){FILE*file;file=fopen("C:\\data.txt",

分配后未更新 C++ 字符串大小

intmain(intargc,charconst*argv[]){constchar*s1="hello";strings2;s2=s1;s2.reserve(10);s2[5]='.';s2[6]='o';s2[7]='\0';cout上面的代码没有正确打印s2。它始终打印hello而不是hello.o。似乎s2的大小在第一次分配后始终保持在5。为什么会这样? 最佳答案 operator[]不会调整字符串的大小。并且您使用索引5、6和7对它的调用超出范围且行为未定义。使用resize将字符串设置为特定大小,或使用push_bac

c++ - 在 C/C++ 中清除 char 数组的最佳方法是什么?

我一直在寻找在C/C++中清空char数组的方法。我想出了这段代码:chartestName[20];for(inti=0;i它已经工作了一段时间了,但是当我尝试strlen时,结果总是比输入的单词多两个。例如,我输入单词dog输出将是5。为什么?我的字符数组没有被清除吗?这是我的代码:chartestName[20];voidloop(){if(Serial.available()){Serial.println("Waitingforname...");index=0;for(inti=0;i输出截图:输出为文本:Namereceived:dogThesentenceentered

c++ - 如何从 std 字符串 (c_str()) 设置 char * 值不起作用

我不知道,但这对我不起作用,当我尝试从返回标准字符串的函数中设置char*值时,我得到了垃圾值:stringfoo(){stringtmp="dummyvalue";returntmp;}char*cc=(char*)foo().c_str();//ifiremovethecastingimgettingerror//wheniprinttheccigetgarbageprintf("%s",cc); 最佳答案 cc指向的数据的生命周期与它来自的字符串的生命周期相同(充其量-如果您修改字符串,它甚至更短)。在你的例子中,foo()的

c++ - 如何有效地将 std::vector<char> 复制到 std::string

这个问题是这个Howtoefficientlycopyastd::stringintoavector的反面我通常以这种方式复制vector(空终止字符串)std::strings((char*)&v[0]);或者(如果字符串已经被声明)像这样s=(char*)&v[0];它完成了工作,但也许还有更好的方法。编辑C风格的转换很丑陋,有人告诉我这又如何s=reinterpret_cast(&vo[0]); 最佳答案 只需使用迭代器构造函数:std::strings(v.begin(),v.end());(编辑):或者使用char-poi

c++ - 为什么是无限循环?

我试图将255ascii字符写入控制台,但出现无限循环for(chari=0;i 最佳答案 因为i永远不会大于或等于256。它会在它之前溢出。请记住,它的类型是char如果它是unsigned其最大值可以是255,否则127如果它是签名。char是unsigned还是signed,是实现定义的。但通常,根据我的经验,它是有符号的,这意味着通常char可以达到的最大值是127。所以i从0递增到127,然后变为-128,从这里递增到>127,等等,如果它是签名。如果它是unsigned,那么它会从0到255,接下来它会变成0(由于溢出)

c++ - 具有模板参数大小的 Const char 数组与 char 指针

我今天在一些代码中看到了以下类型的构造:templateunsignedintf(constchar(&a)[N]);有这个比有任何合理的点:unsignedintf(constchar*a);我隐约理解后者的指针共享含义,但它真的很糟糕,需要用两倍大小的晦涩代码代替吗?(不幸的是,我不能问代码的作者,否则我会) 最佳答案 将任何原始指针传递给函数的目的是调用者有一些想法:它指向什么。它指向多少。作为输入参数的C风格字符串推断后者,因为假设“多少”被认为是到达空字符终止符。但是如果您不传递C风格的字符串怎么办?如果它只是零个或多个c

c++ - 将 _TCHAR* 转换为 char*

我正在尝试获取asimpleOpenCVsample在Windows上使用C++工作,而我的C++不仅仅是生锈的。Thesample相当简单:#include#include#includeusingnamespacecv;usingnamespacestd;intmain(intargc,char**argv){if(argc!=2){cout当我在VisualStudio2012中创建一个新的简单C++控制台应用程序(使用ATL)时,我得到了一个不同的main模板:int_tmain(intargc,_TCHAR*argv[])所以在我将文件名发送到OpenCV的imread函数之