64,654
社区成员
发帖
与我相关
我的任务
分享
char a[4] = {0,0,1,1};
int i;
char *p;
i=1;
p=(char *)&i;
if (p[0]==1) {//小端
p[0]=a[3];p[1]=a[2];p[2]=a[1];p[3]=a[0];
} else {//大端
p[0]=a[0];p[1]=a[1];p[2]=a[2];p[3]=a[3];
}
printf("%d\n",i);//257
关于7楼:
- 1610481664 = 0xA0020000
00 00 02 A0
00000000(0),00000000(0),00000010(0),10100000(160)
这是Intel 格式 ,低字节在低地地址,高字节在高地址。
大小端是字节序的格式,其实就是Intel 和 Motolola 两种格式的分别。
X86下,DOS,Windows 是 Intel 格式。
TIFF文件 用 II,MM 来区分文件的字节序
II是 Intel 格式,MM是Motolola格式。
所以TIFF格式文件无论大小端,都是可以识别的。
至于大小端本身,我似乎看到两种说法
一种说 Intel 格式是小端。
一种说 Intel 格式是大端。
所以大小端这个,我真不知道,应该认可哪一种说法。
这个大小端,只有请大神们来确认一下了。
union atoi
{
char a[4];
int x;
};
就用上面这个联合体定义一个变量就好,直接使用x就可以了。另外,注意下应该char[0]是最高位128 64 32 16 8 4 2 1
32768 16384 8192 4096 2048 1024 512 256