我最近想把一个4字节数组的内容分配给一个4字节变量,其中包含字节移位和逻辑OR。
我想检查是否将数组直接转换为int*并获得值。我写了一个小测试程序:
int main(int argc, char** argv) {
int out = 0;
char in[4] = {0xFF,0xFF,0xFF,0xFF};
char *in2 = NULL;
printf("out = %d\n",out);
out = (int)in[0] << 24 | (int)in[1] << 16 | (int)in[2] << 8 | (int)in[3];
printf("out = %d\n",out);
out = 0;
out = *((int*)in);
printf("out = %d\n",out);
in2 = (char*)malloc(4);
for(int i = 0; i < 4; i++)
in2[i] = 0xFF;
out = 0;
// Byte-Shifting & OR
out = (int)in2[0] << 24 | (int)in2[1] << 16 | (int)in2[2] << 8 | (int)in2[3];
printf("out = %d\n",out);
out = 0;
//Direct assignment by recasting
out = *((int*)in2);
printf("out = %d\n",out);
return 0;
}预期的输出等于-1:
out =0 out = -1 out = -1 out
但是我担心内存对齐和这种方法的安全性:它安全吗?如果不是,是因为编译器规范还是某种未定义的行为?
发布于 2015-11-20 09:57:54
但是我担心内存对齐和这种方法的安全性:它安全吗?如果不是,是因为编译器规范还是某种未定义的行为?
不,这不安全
out = *((int*)in);是未定义的行为,它违反C混叠规则,并可能执行非对齐访问。
https://stackoverflow.com/questions/33823635
复制相似问题