免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2353 | 回复: 6
打印 上一主题 下一主题

我理解的字节序。请指教。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-19 16:18 |只看该作者 |倒序浏览
5可用积分
字节序其实就是一个规定。
比如一个小型机和一台linux或windows通讯,怎么规定什么字节序呢,如果我发送的是小头的,linux或windows接收到后,当然可以自己识别一下。不过最好就是干脆,大家发送都按照网络大头发送。这样,任何机器发送时都用的大头(如果本身是小头就自己转),所有机器接收的也都是大头,如果自己要用小头就自己转。

是这样么?我主要想问的是,所谓的网络按照大头来是不是这样:
比如我的系统是小头的,我的程序本身不转换,发送时在网络中就“自动”变成大头了?
是这样?还是说所谓的网络是大头只是一个约定?

小弟头一次散分,给点面子哦。

最佳答案

查看完整内容

比如一个小型机和一台linux或windows通讯,怎么规定什么字节序呢============================================当要通讯的两台机器使用不同的字节序时,通常是把主机的字节序存储到套接口的地址结构中,然后再转换成网络字节序格式;在网络协议中,使用的是大端字节序。比如我的系统是小头的,我的程序本身不转换,发送时在网络中就“自动”变成大头了?=========================呵呵,没有这么好帮你自 ...

论坛徽章:
0
2 [报告]
发表于 2008-04-19 16:18 |只看该作者
比如一个小型机和一台linux或windows通讯,怎么规定什么字节序呢
============================================
当要通讯的两台机器使用不同的字节序时,通常是把主机的字节序存储到套接口的地址结构中,然后再转换成网络字节序格式;在网络协议中,使用的是大端字节序。


比如我的系统是小头的,我的程序本身不转换,发送时在网络中就“自动”变成大头了?
=========================
呵呵,没有这么好帮你自动转换,一般是自己转,man一下: htons, htonl 系列的函数。


是这样?还是说所谓的网络是大头只是一个约定?
======================
是网络协议规定的。

论坛徽章:
0
3 [报告]
发表于 2008-04-19 16:45 |只看该作者

回复 #1 77h2_eleven 的帖子


  1. Network protocols specify a byte ordering so that heterogeneous computer systems can exchange protocol information without confusing the byte ordering. The TCP/IP protocol suite uses big-endian byte order. The byte ordering becomes visible to applications when they exchange formatted data. With TCP/IP, addresses are presented in network byte order, so applications sometimes need to translate them between the processor 's byte order and the network byte order. This is common when printing an address in a human-readable form, for example.

  2. Four common functions are provided to convert between the processor byte order and the network byte order for TCP/IP applications.


  3. #include <arpa/inet.h>

  4. uint32_t htonl(uint32_t hostint32);
  5. Returns: 32-bit integer in network byte order


  6. uint16_t htons(uint16_t hostint16);
  7. Returns: 16-bit integer in network byte order


  8. uint32_t ntohl(uint32_t netint32);
  9. Returns: 32-bit integer in host byte order


  10. uint16_t ntohs(uint16_t netint16);
  11. Returns: 16-bit integer in host byte order

复制代码

-- come from apue 2rd chapter 16.3.1

论坛徽章:
0
4 [报告]
发表于 2008-04-19 16:46 |只看该作者
理解的复杂了,其实就是规定罢了,大家因为各自有不同的情况,所以相互通信的时候都要把数据按照这个标准进行封装了再发出去,处理的时候再转回自己平台的标准来.

从这个意义上说,字节序和TCPIP之类的协议没什么区别,就是一个处理数据的规则.

论坛徽章:
0
5 [报告]
发表于 2008-04-19 19:56 |只看该作者
原帖由 converse 于 2008-4-19 16:46 发表
理解的复杂了,其实就是规定罢了,大家因为各自有不同的情况,所以相互通信的时候都要把数据按照这个标准进行封装了再发出去,处理的时候再转回自己平台的标准来.

从这个意义上说,字节序和TCPIP之类的协议没什么 ...


up...

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-04-19 20:02 |只看该作者
我告你怎么理解字节序:
好比有个人的名字叫做:
思·平
那么只要是个中国人看了,都知道这个人姓思名平,
但是如果你给英国人看,它就以为这人姓平名思呢。
所以得做字节序的转换,于是外企里的人就统统都变成:
平·思
这样子了

[ 本帖最后由 flw 于 2008-4-19 21:50 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-04-19 20:53 |只看该作者
多谢大家。
这回比较肯定的知道了。
大家回答的都很不错。不过LinuxKen最快,所以就给这位仁兄了。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP