在网络编程中,为了保证网络字节序,那么double,float类型的该怎么转化?

shimx 2003-12-04 07:34:38
我想 short可以用htons, int可以用 htonl,那么 double和float类型呢?
...全文
640 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shimx 2003-12-05
  • 打赏
  • 举报
回复
你的意思是不是就是只要我把 大于 1个字节的结构拷贝到 字节流中,然后接收端也采用同样的方式读取,这样的话就不需要考虑 本机和目标机的字节顺序了吗? 我的理解正确吗?
如果我按照以下的情况去操作,那就必须要考虑主机序,网络序了吧?!
unsigned char data[10];
unsigned long ulData = *(unsigned long*)data;
fierygnu 2003-12-05
  • 打赏
  • 举报
回复
必须考虑字节顺序。楼上几位回答错误。
至于float和double,与CPU无关。一般编译器是按照IEEE标准解释的,即把float/double看作4/8个字符的数组进行解释。因此,只要编译器是支持IEEE浮点标准的,就不需要考虑字节顺序。
pc200300 2003-12-04
  • 打赏
  • 举报
回复
但是假如我的系统主机是LittleEndian,而接收端是Bigendian,虽然是自己开发的系统,但是doulbe这种类型的数据仍然存在 转换的问题,如果我直接读入数据,字节序一定是反的。

1从你的问题可以看出,你根本就没有考虑主机字节的存储顺序;
2如果你的通讯双方的CPU的存储顺序相同的话,你完全不用考虑那么多;

int iValue=32;

char buff[4];

memcpy(buff,iValue,4)//32位编程

把buff发到对方做如下处理:

int iValue0;

memcpy(iValue0,buff,4);

类似就可以了
pc200300 2003-12-04
  • 打赏
  • 举报
回复
其实我们关注的主要是主机字节顺序,有的CPU是从底到高存储,有的是从高到底存储,我们只要根据这个原则处理以下就可以了。
shimx 2003-12-04
  • 打赏
  • 举报
回复
但是假如我的系统主机是LittleEndian,而接收端是Bigendian,虽然是自己开发的系统,但是doulbe这种类型的数据仍然存在 转换的问题,如果我直接读入数据,字节序一定是反的。
netsys2 2003-12-04
  • 打赏
  • 举报
回复
这不重要,htons和htonl是因为TCP/IP的一些参数用到int,long,但它们没有float,double的参数。

至于你自己的数据,传输时都是按BYTE类型传输的,对方按照相同格式接收处理就行了

4,354

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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