我是C / C ++的新手。经过长时间的研究,我需要你的帮助。我只想在unsigned char*
中存储一个数字,然后将数字带回来。
int nu = 50;
unsigned char byteArray[sizeof(int)];
memcpy(byteArray, &nu, sizeof(int));
int newNu = reinterpret_cast<int>(byteArray);
我期待newNu将是50,相反,它不是。有人能告诉我哪里错了吗?
对于int
- &gt; unsign char*
我认为我是对的,但如何扭转进展?这是正确的方法吗?顺便说一句,我在Visual Studio
答案 0 :(得分:7)
您的演员阵容会将数组的地址转换为数字。
获得价值的正确方法是:
int newNu;
memcpy(&newNu, byteArray, sizeof newNu);
注意:天真的尝试是:
newNu = *reinterpret_cast<int *>(byteArray);
然而,这违反了strict aliasing rule,并且可能是对齐违规。不要这样做。警告:您可能会在各种(非常好的)参考文献中看到此错误。
答案 1 :(得分:1)
不要这样做!!!
但是如果你刚刚遇到......
这部分不正确:
int newNu = reinterpret_cast<int>(byteArray);
您正在将char
数组的地址转换为int
,这绝对不是50 ...
这是获得您期望的代码:
int newNu = *reinterpret_cast<int*>(byteArray);
另请注意memcpy
中的参数顺序...
它应该是
memcpy(&newNu, byteArray, sizeof newNu);