送分100分:关于大端序小端序的问题

NOBUTYOU 2010-01-26 08:21:30
一个LONG型数值在内存、文件、显示时的端序问题,哪位可告知的详细一些。
...全文
158 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiptio 2011-07-09
  • 打赏
  • 举报
回复
看看是什么
Tiger_Zhao 2010-01-27
  • 打赏
  • 举报
回复
还有:字节序和位序是两码事。
只有在串行传输中才会考虑位序;上层应用总是以字节为最小数据单位,只要考虑字节序就可以了。
qiangshou2301 2010-01-27
  • 打赏
  • 举报
回复
Tiger_Zhao 2010-01-27
  • 打赏
  • 举报
回复
注意:只有在网络传输中需要解析的信息(比如 IP),才需要考虑端序。
对于被传输的数据,都是数据包,不存在端序之说,
guoyu_bo 2010-01-27
  • 打赏
  • 举报
回复
一般用于描述串行设备的传输顺序。一般硬件传输采用小端序(先传低位),但I2C协议采用大端序。网络协议中只有数据链路层的底端会涉及到。
guoyu_bo 2010-01-27
  • 打赏
  • 举报
回复
网络传输一般采用大端序,也被称之为网络字节序,或网络序。IP协议中定义大端序为网络字节序。

伯克利socket API定义了一组转换函数,用于16和32bit整数在网络序和本机字节序之间的转换。htonl,htons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序。

NOBUTYOU 2010-01-27
  • 打赏
  • 举报
回复
请问,一个字节通过网络传输的时候,是先传低位,还是先传高位。
hehaiyi2008 2010-01-26
  • 打赏
  • 举报
回复
学习!
Tiger_Zhao 2010-01-26
  • 打赏
  • 举报
回复
内存中的与计算机硬件有关,80x86 的是 little-endian,MAC 机的是 big-endian。

操作系统与硬件匹配,应此保存的文件默认格式为 80x86 下的是 little-endian,MAC 机下的是 big-endian。但是文件是可以跨系统传输的,所以操作与本系统不一致的端序文件不稀奇。有的是处理程序强制指定文件的端序;更好的方式是在文件头中加上 BOM 标记,WinXP 的记事本就有这个功能。

显示其实无所谓端序,只不过一般习惯的书写顺序是从大到小,所以也可以认为是 big-endian。
qiangshou2301 2010-01-26
  • 打赏
  • 举报
回复
学习
guoyu_bo 2010-01-26
  • 打赏
  • 举报
回复
http://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F
只有在内存中才会涉及这个 其他的时候都不会涉及到 即使是进行位的左移或右移也不用考虑
赵4老师 2010-01-26
  • 打赏
  • 举报
回复
参考上帖
如果你在内存或文件中看到&h00 &h00 &h00 &h01四个字节并将其理解为一个Long变量时
小端其值是&H01000000&对应十进制16777216
大端其值是&H00000001&对应十进制1
赵4老师 2010-01-26
  • 打赏
  • 举报
回复
在内存、文件中都要考虑大端小端问题
比如要保存
dim L as long
L=&H12345678&
小端在内存(沿地址从小到大方向)和文件(沿偏移量从小到大方向)中都是&h78 &h56 &h34 &h12四个字节(用于Intel系列CPU)

大端在内存(沿地址从小到大方向)和文件(沿偏移量从小到大方向)中都是&h12 &h34 &h56 &h78四个字节(用于MC68000系列CPU和网络封包时)

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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