gpt4 book ai didi

c - 为什么它看起来像数组在 c union 体中反向索引?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:46 25 4
gpt4 key购买 nike

在 c 中创建无符号整数和 4 字节数组的 union 时,字节的顺序似乎颠倒了。这是为什么?

对于二进制表示的整数 10000000 00000000 00000000 00000000,我希望 b[0] = 10000000,b[1] = 00000000 等等。

#include <stdio.h>
#include <stdlib.h>

typedef union intByteRep{
unsigned int i; // 00000000 00000000 00000000 00000000
unsigned char b[4]; // b[0] b[1] b[2] b[3] - What we would expect
// b[3] b[2] b[1] b[0] - What is happening
} intByteRep;

char *binbin(int n);

int main(int argc, char **argv) {

intByteRep ibr;
ibr.i = 2147483648; // 10000000 00000000 00000000 00000000

for(int i = 0; i < 4; i++){
printf("%s ", binbin(ibr.b[i]));
}
printf("\n"); // prints 00000000 00000000 00000000 10000000

for(int i = 3; i >= 0; i--){
printf("%s ", binbin(ibr.b[i]));
}
printf("\n"); // prints 10000000 00000000 00000000 00000000

return 0;
}

/*function to convert byte value to binary string representation*/
char *binbin(int n)
{
static char bin[9];
int x;
for(x=0; x<8; x++)
{
bin[x] = n & 0x80 ? '1' : '0';
n <<= 1;
}
bin[x] = ' ';
return(bin);
}

最佳答案

因为你的系统是小端。

32 位整数 0x11223344 存储在内存中 0x44 0x33 0x22 0x11

在大端系统上它会被存储为:0x11 0x22 0x33 0x44

顺便说一句,大多数流行的 uP 都是小端。

关于c - 为什么它看起来像数组在 c union 体中反向索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800153/

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