c ++ - 在int中存储byte [4]

时间:2014-10-06 01:14:28

标签: c++ int byte type-conversion

我想要一个包含4个字节的字节数组,并将其存储在int。

例如(非工作代码):

unsigned char _bytes[4];
int * combine;
_bytes[0] = 1;
_bytes[1] = 1;
_bytes[2] = 1;
_bytes[3] = 1;
combine = &_bytes[0];

我不想使用位移来将字节放在int中,我想指向字节存储器并尽可能将它们用作int。

1 个答案:

答案 0 :(得分:2)

在标准C ++中,它无法可靠地执行此操作。严格别名规则表示当您通读类型int的表达式时,它必须实际指定int对象(或const int等),否则会导致未定义的行为。

但是你可以这样做:声明一个int,然后填写字节:

int combine;
unsigned char *bytes = reinterpret_cast<unsigned char *>(&combine);
bytes[0] = 1;
bytes[1] = 1;
bytes[2] = 1;
bytes[3] = 1;

std::cout << combine << std::endl;

当然,你从中得到的值取决于你的系统如何表示整数。如果您希望代码在不同的系统上使用相同的映射,那么您就不能使用内存别名;你不得不改用方程式。