美文网首页
主机字节顺序HBO(Host Byte Order)

主机字节顺序HBO(Host Byte Order)

作者: taj3991 | 来源:发表于2019-12-24 18:57 被阅读0次

网络字节顺序NBO(Network Byte Order)

按从高到低的顺序存储,在网络上使用同一的网络字节顺序,可避免兼容性问题;

主机字节顺序HBO(Host Byte Order)

不同的机器HBO不相同,与CPU的设计有关,数据的顺序是由CPU决定的,而与操作系统无关;
如Intel x86结构下,short型数0x1234表示为34 12,int型数0x12345678表示为78 56 34 12;
如IBM power PC结构下,short型数0x1234表示为 12 34,int型数0x12345678表示为 12 34 56 78.
由于这个原因,不同体系结构的机器之间不能直接通信,所以要转换成一种约定的顺序,也就是网络字节顺序,其实就是如同power pc那样的顺序。在PC开发中有ntohl和htonl函数可以用来进行网络字节和主机字节的转换

linx系统下,htonl() htons() ntohl() ntohs()的头文件及函数定义如下:

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

在windows下,htonl() htons() ntohl() ntohs()的使用说明:

ntohs()
简述:

将一个无符号短整形数从网络字节顺序转换为主机字节顺序。

include <winsock.h>

u_short PASCAL FAR ntohs( u_short netshort);
netshort:一个以网络字节顺序表达的16位数。
注释:本函数将一个16位数由网络字节顺序转换为主机字节顺序。
返回值:ntohs()返回一个以主机字节顺序表达的数。

htons()
简述:将主机的无符号短整形数转换成网络字节顺序。
 #include <winsock.h>
 u_short PASCAL FAR htons( u_short hostshort);
 hostshort:主机字节顺序表达的16位数。
 注释:本函数将一个16位数从主机字节顺序转换成网络字节顺序。
 返回值:htons()返回一个网络字节顺序的值。

htons和htonl都是把主机字节序转换成网络字节序。那什么时候用htons,什么时候用htonl??听网上说一个是16位一个是32位,但是如何去判断?假设servaddr.sin_port = htons(5555);用htonl可以吗?根据什么可以判断?

根据要转换的值是否超过16位来决定,5555转换为2进制为1 0101 1011 0011 ,为13位,所以一般用htons,当然用htonl也可以;
但是如果要转换的数 转换成2进制超过16位,则只能用htonl,此时如果用htons,16位以上的数舍去,造成数据值偏差。

原文https://blog.csdn.net/qingkongyeyue/article/details/52921530

相关文章

  • 主机字节顺序HBO(Host Byte Order)

    网络字节顺序NBO(Network Byte Order) 按从高到低的顺序存储,在网络上使用同一的网络字节顺序,...

  • 大小端字节序

    字节序,或字节顺序("Endian"、"endianness" 或 "byte-order"),描述了计算机如何组...

  • ntohs,htons,ntohl,htonl

    n:网络字节顺序NBO(Network Byte Order ): 从高到低的顺序储存,在网络上使用同一的网络字节...

  • Byte Order Mark(BOM)介绍

    字节顺序标记(byte order mark,BOM)由数据流开始处的字符代码 U + FEFF 组成,它可以用作...

  • htonl()与ntohl()

    htonl就是把本机字节顺序转化为网络字节顺序 ntohl就是把网络字节顺序转化为本机字节顺序 h---host ...

  • Linux socket编程:地址及转换

    1. 网络字节序与主机字节序 1.1 主机字节序() CPU的字节顺序类型, 小端,little endian; ...

  • 文件带 BOM 的看法

    释义 BOM(byte order mark)是为 UTF-16 和 UTF-32 准备的,用于标记字节序(byt...

  • [CS] 字节序

    1. 什么是字节序(Byte Order) 计算机读取数据时,对字节的排序方式。分为两种(以A=0x1122为例)...

  • 大端序和小端序

    1、概念 字节序,又称端序,英文名称Endianness。字节序是指存放多字节(byte)数据的顺序。多用于整数在...

  • golang之大端序、小端序

    一、概述 字节序:字节在电脑中存放时的序列与输入/输出时的序列;也指的是存放多字节数据的字节(byte)的顺序,典...

网友评论

      本文标题:主机字节顺序HBO(Host Byte Order)

      本文链接:https://www.haomeiwen.com/subject/kcmfoctx.html