gpt4 book ai didi

c - 基于内存对齐将字节数组转换为 int 是否安全?

转载 作者:行者123 更新时间:2023-12-02 07:24:55 26 4
gpt4 key购买 nike

我最近想通过字节移位和逻辑或将一个 4 字节数组的内容分配到一个 4 字节变量中。

我想检查直接将数组转换为 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 = -1 out = -1

但我担心内存对齐和此方法的安全性:它安全吗?如果不是,是由于编译器规范还是某种未定义的行为?

最佳答案

But I'm worried about memory alignment and the safety of this method : is it safe ? If not, is it due to compiler specification or some kind of undefined behavior ?

不,这不安全:

out = *((int*)in);

是未定义的行为,它违反了 C 别名规则,可能会执行未对齐的访问。

关于c - 基于内存对齐将字节数组转换为 int 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33823635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com