无法从char指针复制到short

肖尔·祖阿雷兹(Shaul Zuarets)

我有一个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;

提前致谢

托马斯·莱沃夫斯基(Tomasz Lewowski)

让我们看一下内存,假设short的大小是char大小的两倍(并非总是如此!):

具有“ 22”字符串的char数组在内存中:

50 50

所以基本上

00110010 00110010

当您将其简化为短时,会得到一个由两个字节组成的数字:

00110010 00110010

换算成十进制表示12850。

现在,我认为您真的想将“ 22” ascii表转换为“ 22”值。在这种情况下,您可以参考

将字符串转换为int C ++

如果您确实需要支持诸如“ 23123dsdwdwqdwqd”之类的字符串(这种情况很少见),则可以复制所需大小的子字符串并在该子字符串上工作。

请记住,关于可变大小,只有C ++标准保证的是

sizeof(char) <= sizeof (short) <= sizeof(int) <= sizeof(long)

因此,如果您依赖一个事实,sizeof(short) = 2 * sizeof(char)那么您根本就不会便携。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章