草庐IT

c++ - 将字节数组(char数组)转换为整数类型(short、int、long)

我想知道在将字节数组转换为短/整数/长时系统字节序是否重要。如果代码在big-endian和little-endian机器上运行,这样做会不会不正确?shorts=(b[0] 最佳答案 是的,字节顺序很重要。在littleendian中,最重要的字节位于short或int的上半部分-即short的8-15位和int的24-31位。对于大端,字节顺序需要颠倒:shorts=((b[1]请注意,这假定字节数组是小端序。字节数组和整数类型的字节序和转换不仅取决于CPU的字节序,还取决于字节数组数据的字节序。建议将这些转换包装在能够知道(通

c++ - 静态 const char* 和 const char* 之间的区别

有人能解释一下下面2段代码的处理方式的区别吗?它们肯定会编译成不同的汇编代码,但我试图了解代码如何表现不同。我知道字符串文字被放入只读内存并且实际上是静态的,但这与下面的显式静态有何不同?structObj1{voidFoo(){constchar*str("hello");}};和structObj2{voidFoo(){staticconstchar*str("hello");}}; 最佳答案 在您的静态版本中,只有一个变量将存储在某处,并且无论何时执行该函数,都将使用完全相同的变量。即使是递归调用。非静态版本将在每次函数调用时

C++ - char* 与 string*

如果我有一个指向字符串变量chars数组的指针,那么键入是否有区别:char*name="name";还有,stringname="name"; 最佳答案 是的,有区别。主要是因为你可以修改你的字符串,但你不能修改你的第一个版本——但是如果你尝试,C++编译器甚至不会警告你这是被禁止的。所以总是使用第二个版本。如果无论出于何种原因你需要使用一个字符指针,就让它const:charconst*str="name";现在,如果您尝试修改str的内容,编译器将(正确地)禁止这样做。您还应该将编译器的警告级别提高一个档次:然后它会警告您的第

c++ - 将 auto_ptr 与 new char[n] 一起使用是否错误

如果我声明一个临时自动删除的字符缓冲区使用std::auto_ptrbuffer(newchar[n]);然后当缓冲区超出范围时,缓冲区会被自动删除。我会假设缓冲区是使用delete删除的。但是缓冲区是使用new[]创建的,所以严格来说应该使用delete[]删除缓冲区。这种不匹配可能导致内存泄漏的可能性有多大? 最佳答案 对用new[]分配的指针调用delete的行为是undefined.如您所料,auto_ptrdoescalldelete当智能指针超出范围时。您需要担心的不仅仅是内存泄漏——崩溃和其他奇怪的行为也是可能的。如果

c++ - 如何从 const char* 转换为 unsigned int c++

我是C++编程的新手,我一直在尝试从constchar*转换为unsignedint,但没有成功。我有一个:constchar*charVar;我需要将其转换为:unsignedintuintVar;如何在C++中完成?谢谢 最佳答案 #include#includeconstchar*value="1234567";stringstreamstrValue;strValue>intValue;cout输出:12345671234567 关于c++-如何从constchar*转换为uns

c++ - C+ +'s Strict Aliasing Rule - Is the ' char' 别名豁免一条 2 路街道?

就在几周前,我了解到C++标准有一个严格的别名规则。基本上,我问了一个关于移位的问题——而不是一次移位一个字节,为了最大限度地提高性能,我想用(分别为32或64位)加载处理器的native寄存器并执行4/8的移位字节全部在一条指令中。这是我想避免的代码:unsignedcharbuffer[]={0xab,0xcd,0xef,0x46};for(inti=0;i>4);}buffer[3]相反,我想使用类似的东西:unsignedcharbuffer[]={0xab,0xcd,0xef,0x46};unsignedint*p=(unsignedint*)buffer;//unsigne

c++ - 为什么 C 不允许从 char ** 到 const char *const * 的隐式转换(而 C++ 允许)?

我知道从char**到constchar**的隐式转换无法完成以及为什么,以及到char*const*有效。请参阅底部的解释链接。除了一件特定的事情之外,这一切都是有意义的。所以我有以下代码:#includevoidprint(constchar*const*param){printf("%s\n",param[0]);}intmain(intargc,char**argv){print(argv);return0;}如果我将它编译为C++代码,它编译得非常好。但是,如果相同的代码仅编译为C代码,我会收到一个错误(好吧,一个警告,但我们假设-Werror,即将警告视为错误)。gcc:t

c++ - 为什么 char 指针变量可以初始化为字符串,而 int 指针变量不能初始化为整数数组?

这个问题在这里已经有了答案:Howcanacharpointerbeinitializedwithastring(Arrayofcharacters)butanintpointernotwithanarrayofinteger?[duplicate](4个回答)关闭5年前。我试图理解字符串、数组和指针之间的关系。我正在阅读的这本书有一个程序,它在其中初始化一个变量,如下所示:char*szString="Name";我理解这一点的方式是,C风格的字符串只是一个字符数组。数组只是引用指针(存储数组的第一个值)和偏移量的简写版本。IE。array[5]实际上返回从表达式*(array+5)

c++ - 从函数返回 char*

以下是3个功能。main()按预期打印出来。现在,我猜在mycharstack()中,字符串存储在堆栈中,因此当“ch”超出范围时,它应该无法返回字符串。它是如何正常工作的?我猜存储在mychar()中的字符串也在堆栈上。它应该正常工作吗?我猜代码中还有其他错误和内存泄漏,如果有请告诉我。我可以用std::string做这些更清洁和更容易的事情。但我想了解char*是怎么回事。#includeusingnamespacestd;char*mychar(){return"Hello";}char*mycharstack(){char*ch="HelloStack";returnch;}c

c++ - 将 lptstr 转换为 char*

有人知道如何在C++中将类型LPTSTR转换为char*吗? 最佳答案 取决于它是否显示为Unicode。如果不是Unicode,LPTSTR是char*,如果是,则为w_char*。Discussedbetterhere(接受的答案值得一读) 关于c++-将lptstr转换为char*,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/342772/