作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近想通过字节移位和逻辑或将一个 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/
我是一名优秀的程序员,十分优秀!