我想要一个包含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。
答案 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;
当然,你从中得到的值取决于你的系统如何表示整数。如果您希望代码在不同的系统上使用相同的映射,那么您就不能使用内存别名;你不得不改用方程式。