int到unsigned char *,反之亦然

时间:2016-05-17 08:09:50

标签: c++ visual-studio

我是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

上汇编了这个

2 个答案:

答案 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);