大小字节序概念,越理解越乱,大家解释下

wmcode 2010-01-13 03:41:02
【概念】

little endian: 逻辑低的放在低字节位
big endian:逻辑高的放在低字节位

【测试条件】

中文"木",转化成二进制为110011100101000,再转成16进制如下:

1100111 00101000
67 28

【推出结论】

按我的理解,67属于逻辑高的字节,28属于逻辑低的字节,左边是高字节位,右边是低字节位,那么:

大字节序:2867
小字节序:6728

【正确结果】

打开windows记事本,输入一个"木"字,保存时编码使用"Unicode big endian",用UE打开,16进制内容如下:
FE FF 67 28

也就是说:6728为大字节序,和上边推出的结论刚好相反,不知何解?
...全文
272 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhq_442577358 2010-01-13
  • 打赏
  • 举报
回复
rrrr
vrhero 2010-01-13
  • 打赏
  • 举报
回复
在跟你说一遍...6728本来就是unicode big endian编码,也就是说它本来就是big endian...你只有改变字符编码才会有2867这样的little endian...

不要用字符类型做这种测试,不同编码的结构不相同...用int这样的整型数去做...
wartim 2010-01-13
  • 打赏
  • 举报
回复
big endian:逻辑高的放在低字节位

应该说是低字节位 ,不是低位,67是低字节位,但对字符而言是高位
烈火蜓蜻 2010-01-13
  • 打赏
  • 举报
回复
我想告诉你的是,Window用的是高位数字是放在前,低位是放在后的,其它系统的话,就不太清楚了,反正,有些系统是把高字节放在后面,低字节放前面,因此,这两类系统通信就会有问题,因此,TCP/IP协议定制了网络字节,就是采用高字节在后,低字节在前,因此,Windows在和这样系统通讯时,就会把数字倒排,当然这仅仅只是针对数字而已,字符串,则无此规定
wmcode 2010-01-13
  • 打赏
  • 举报
回复
6728是经实际测试得来的,假如只知道:

1100111 00101000
67 28

那怎么得出big endian和little endian的值应为多少?
wartim 2010-01-13
  • 打赏
  • 举报
回复
对,汇编里讲过的吧,内存地址是从低向高编码的
0000 00
0001 11
0002 22
0003 33
。。。

存放的2个整数是 0x0011 0x2233
vrhero 2010-01-13
  • 打赏
  • 举报
回复
你的测试条件就是告诉计算机要按big endian排列,计算机按big endian排列了...然后你得出结论,不对啊,它为什么不是little endian?你说为什么呢?
vrhero 2010-01-13
  • 打赏
  • 举报
回复
中文"木"的unicode big endian编码本来就是6728...有什么奇怪的?你的“测试条件”就是错的...

2楼乱推测...
wmcode 2010-01-13
  • 打赏
  • 举报
回复
也就是说物理位置是越后越高?
wartim 2010-01-13
  • 打赏
  • 举报
回复
00 FE
01 FF
02 67
03 28

67是放在低位啊
如果放在高位应该是
02 28
03 67
sz101 2010-01-13
  • 打赏
  • 举报
回复
不动,帮顶

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧