我有一个char指针,其中包含以下信息:
char* data = "22";
我想将其从char中复制到一个简短的变量中。我有以下代码:
short BinarySerializer::getMessageTypeID(char* data)
{
short* messageTypeID;
memcpy( messageTypeID, data, sizeof( messageTypeID ) );
return *messageTypeID;
}
我不知道为什么,但是当我打印时,我得到:12850。
这是我的打印方式:
short temp = msg->messageTypeID;
cout << "Message ID is: " << temp << endl;
提前致谢
让我们看一下内存,假设short的大小是char大小的两倍(并非总是如此!):
具有“ 22”字符串的char数组在内存中:
50 50
所以基本上
00110010 00110010
当您将其简化为短时,会得到一个由两个字节组成的数字:
00110010 00110010
换算成十进制表示12850。
现在,我认为您真的想将“ 22” ascii表转换为“ 22”值。在这种情况下,您可以参考
如果您确实需要支持诸如“ 23123dsdwdwqdwqd”之类的字符串(这种情况很少见),则可以复制所需大小的子字符串并在该子字符串上工作。
请记住,关于可变大小,只有C ++标准保证的是
sizeof(char) <= sizeof (short) <= sizeof(int) <= sizeof(long)
因此,如果您依赖一个事实,sizeof(short) = 2 * sizeof(char)
那么您根本就不会便携。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句