"刘"字
GBK 编码为 0xC1F5
UNICODE(小端)编码为 0x5218
在windowsXP下用记事本写"刘"字,分别另存为ANSI编码方式,以及unicode编码方式。
用ultraedit打开切换到十六进制模式,发现
ANSI编码保存的文件第一字节为 C1 第二字节是F5,貌似大端模式。难道WINDOWS下ANSI保存的文件是大端字节流的?
unicode编码保存的文件则为 FF FE 18 52 则是小端模式。
网上看了一段解释,引用过来
==============================================================================
http://group.gimoo.net/review/141528
16楼的问题:ANSI为啥是大端序呢?而不是Intel架构的都是小端序么?
可能是因为多字符集编码的特殊规定导致的,而不是真正的大端序。
看下面这段引文:
后来,由于各国语言的加入,ASCII已经不能满足信息交流的需要,因此,为了能够表示其它国家的文字,各国在ASCII的基础上制定了自己的字符集,这些从ANSI标准派生的字符集被习惯的统称为ANSI字符集,它们正式的名称应该是MBCS(Multi-Byte Chactacter System,即多字节字符系统)。这些派生字符集的特点是以ASCII 127 bits为基础,兼容ASCII 127,他们使用大于128的编码作为一个Leading Byte,紧跟在Leading Byte后的第二(甚至第三)个字符与Leading Byte一起作为实际的编码。这样的字符集有很多,我们常见的GB-2312就是其中之一。
例如在GB-2312字符集中,“连通”的编码为C1 AC CD A8,其中C1和CD就是Leading Byte。前127个编码为标准ASCII保留,例如“0”的编码是30H(30H表示十六进制的30)。软件在读取时,如果看到30H,知道它小于128就是标准ASCII,表示“0”,看到C1大于128就知道它后面有一个另外的编码,因此C1 AC一同构成一个整个的编码,在GB-2312字符集中表示“连”。
也就是说对于汉字的ANSI编码而言,无所谓MSB, LSB。它就是把第一个字节理解为Leading Byte,第二个字节理解为另外的编码,所以它们在内存里的存放次序不能倒过来,否则就理解不对了。
刘小莹回复于19日07点28分 有时候我觉得你们有点头脑不清楚,有时候我怀疑是自己头脑不清楚。
霏霏妈妈回复于19日07点37分 几乎在所有的机器上,多字节对象被存储为连续的字节序列,对象地址则是所使用的这些地址的最小地址。比如一个int型的变量i的地址是0x112,那么x所占的字节可能是0x100、0x101、0x102、0x103。
大端法的英文名称big endian,小端法的英文名称为little endian。
小端法的存储规则是从最低有效字节到最高有效字节的顺序存储对象,如上面的变量i的位表示法为0x1234567,则0x100存储01,0x101存储23,0x102存储45,0x103存储67。
大端法存储的规则是从最高有效字节到最低有效字节的顺序存储对象,我们还拿i来举例,那么0x100存储67,0x101存储45,0x102存储23,0x103存储01。