C++ c++;-将字节[4]存储在整数中

C++ c++;-将字节[4]存储在整数中,c++,int,byte,type-conversion,C++,Int,Byte,Type Conversion,我想获取一个包含4个字节的字节数组,并将其存储在int中 例如(非工作代码): < >我不想用位移位来把字节放在int中,我想指向字节内存,如果可能的话,用它们作为int。标准/C++中的不可能可靠地完成。严格的别名规则规定,当您通读类型为int的表达式时,它必须实际指定int对象(或const int等),否则会导致未定义的行为 但是,您可以执行相反的操作:声明一个int,然后填写字节: int combine; unsigned char *bytes = reinterpret_cast&

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

例如(非工作代码):


< >我不想用位移位来把字节放在int中,我想指向字节内存,如果可能的话,用它们作为int。标准/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;
int组合;
无符号字符*字节=重新解释强制转换(&C);
字节[0]=1;
字节[1]=1;
字节[2]=1;
字节[3]=1;

不,你不能。Endianness是未知的,只有位移位可以保证。如果您想在运行时确定主机系统的Endianness,那么这可能很有用。值得注意的是,这也避免了任何对齐问题。这非常适合您修改
合并
,这样做还将更改单个字节中的值。非常感谢。
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;