LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 730|回复: 7

问一个字节序问题

[复制链接]
发表于 2005-9-20 11:39:32 | 显示全部楼层 |阅读模式
如果我的平台是BIG_ENDIAN,我向socket中写入一个buf,另一台平台为LITTLE_ENDIAN的电脑接收数据,那么他接收到的数据会不会有问题呢?如果不会,是在什么地方转换字节序的呢?
发表于 2005-9-20 12:25:48 | 显示全部楼层
有几个函数处理这个:
htonl, ntonl, htons, ntohs
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-20 12:41:56 | 显示全部楼层
这几个仅仅是用来处理套接口地址的,我说的是包中的数据!
回复 支持 反对

使用道具 举报

发表于 2005-9-20 12:46:32 | 显示全部楼层
Post by haohao_h
这几个仅仅是用来处理套接口地址的,我说的是包中的数据!


这种方法也可以处理数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-20 14:22:09 | 显示全部楼层
试了一下,发送端如果不转换的话确实是会出错的
  1. char buf[8];
  2.     unsigned int a=htonl(0x20304050);//这儿如果不做转换的话,发生错误。
  3.     bcopy(&a,buf,sizeof(int));
  4.    
  5.     write(sockfd,buf,sizeof(buf));
复制代码


但是接收的时候却不用转换
  1. unsigned char buf[1024];int nbyte = recvfrom(sockfd,buf,sizeof(buf),0,&client_addr,&client_addr_len);
  2.                         buf[nbyte-1]=0;
  3.                         printf("%x:%x:%x:%x",buf[0],buf[1],\
  4.                                 buf[2],buf[3]);
  5.                         fflush(stdout);
复制代码

转换内核已经做完了吧!
回复 支持 反对

使用道具 举报

发表于 2005-9-20 15:10:44 | 显示全部楼层
发送时用htons或htonl转换, 接收时用ntohs或ntohl转换, 不关怎么都不会出问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-20 15:10:51 | 显示全部楼层
再问一下,在一个LITTLE_ENDIAN系统上编译链接好的二进制代码能不能直接在BIG_ENDIAN的系统上运行的?
回复 支持 反对

使用道具 举报

发表于 2005-9-20 15:13:36 | 显示全部楼层
不知道, 我猜应该不行吧!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表