int为无符号字符*反之亦然
问题描述:
我是C/C++的新手。经过长时间的研究,我需要你的帮助。我只想在unsigned char*
中存储一个号码,然后将号码重新输入。int为无符号字符*反之亦然
int nu = 50;
unsigned char byteArray[sizeof(int)];
memcpy(byteArray, &nu, sizeof(int));
int newNu = reinterpret_cast<int>(byteArray);
我期待newNu将是50,而不是。任何人都可以告诉我我错在哪里?
对于int
- >unsign char*
我认为我是正确的,但如何扭转进展?这是正确的方式吗?顺便说一句,我编译这Visual Studio
答
您的演员将数组地址转换为数字。
正确的方法来获取值的是:
int newNu;
memcpy(&newNu, byteArray, sizeof newNu);
注:天真的尝试是:
newNu = *reinterpret_cast<int *>(byteArray);
然而,这违反了strict aliasing rule,以及可能作为一个对齐违例。不要这样做。警告:您可能会在各种(不是很好)的参考文献中看到这个错误。
答
不要这样做!
,但如果你是刚刚经历......
这部分是不正确的:
int newNu = reinterpret_cast<int>(byteArray);
您铸造char
阵列的地址int
这绝对不是50 ...
这是代码,让你期待什么:
int newNu = *reinterpret_cast<int*>(byteArray);
另外要注意参数顺序memcpy
... 应该
memcpy(&newNu, byteArray, sizeof newNu);
如果你是新的C++不碰数组,指针,memcpy的,特别是与六只脚杆的reinterpret_cast。 –
谢谢大家,我刚刚开始自学C/C++几个月。同意搞乱内存管理是一件很痛苦的事情。我现在会慢一点... –