`
tcspecial
  • 浏览: 911943 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

网络字节序

阅读更多

    虽说现在大部分x86服务器都是小端字节序,但在嵌入式设备上,由于芯片种类繁多,大小端序均有。需考虑程序的可移植性。

 

一.字节序判断

int bigendian()
{
union
{
short value;
char ubytes[ sizeof(short) ];
}test;
 
test.value = 0x0102;
 
if( (test.ubytes[0] == 1) && (test.ubytes[1] == 2) )
{
return 1;
}
 
return 0;
}

 

   上述代码用union结构巧妙实现对字节序的判断

 

二.字节序转换函数

ntohs()将网络字节序转化为主机字节序

htons()将主机字节序转化为网络字节序

ntohl(),htonl()处理int类型

 

# if __BYTE_ORDER == __BIG_ENDIAN
/* The host byte order is the same as network byte order,
   so these functions are all just identity.  */
# define ntohl(x)       (x)
# define ntohs(x)       (x)
# define htonl(x)       (x)
# define htons(x)       (x)
# else
#  if __BYTE_ORDER == __LITTLE_ENDIAN
#   define ntohl(x)     __bswap_32 (x)
#   define ntohs(x)     __bswap_16 (x)
#   define htonl(x)     __bswap_32 (x)
#   define htons(x)     __bswap_16 (x)
#  endif
# endif
#endif

 

ntohs与htons实现一致,都是调用__bswap_32 (x)。由于大端服务器上主机序与网络序一致,不需要转换,所以实现直接返回原值x。

所以只需要考虑小端服务器上的转换,大端服务器无须理会ntohs()调用,代码本身就跨平台。

 

 

分享到:
评论

相关推荐

    IP、主机字节序、网络字节序、互转

    IP、主机字节序、网络字节序、互转 ------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using ...

    浅学字节序——字节序大小端,主机字节序,网络字节序的理解

    在网络通信中,为了确保数据在不同系统间的一致性和可移植性,通常采用大端字节序作为网络字节序的标准。这是因为大端字节序更容易被人类理解和解释,同时也更容易被各种不同的系统接受和处理。 ### 字节序转换 当...

    网络字节序和主机字节序

    网络字节序和主机字节序 在计算机科学中,字节序(Endianness)是指整数在内存中保存的顺序。不同的 CPU 有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。 常见的有两种字节序:...

    利用宏将网络字节序和主机字节序ip格式化输出方法

    利用宏将网络字节序和主机字节序ip格式化输出为字符串ip

    本地字节序和网络字节序.pdf

    《本地字节序和网络字节序:理解与应用》 在计算机科学中,字节序(Byte Order)指的是多字节数据类型在内存中存储时,其各个组成字节的排列顺序。这一概念对于理解数据在网络传输以及跨平台编程中至关重要。本文将...

    5_网络字节序_werevj4_

    "网络字节序",也称为“大端字节序”或“网络字节顺序”,是TCP/IP协议栈中用于多字节数字表示的标准字节顺序。这个概念源于网络上不同计算机系统之间数据交换的需求,因为不同的硬件平台可能使用不同的字节顺序来...

    网络字节序_werevj4_源码.rar

    网络字节序是计算机网络通信中的一个重要概念,它涉及到数据在网络中的传输方式。在不同的计算机系统中,数据存储的顺序可能会有所不同,这被称为字节序。主要有两种字节序:大端字节序(Big-Endian)和小端字节序...

    网络字节序与主机字节序

    网络字节序与主机字节序

    JAVA网络字节序转换1

    Java 网络字节序转换是编程过程中一个重要的概念,尤其在跨平台通信和处理二进制数据时。字节序是指多字节数据(如整数或浮点数)在内存或文件中存储的顺序。主要有两种字节序:Big-Endian(大端字节序)和 Little-...

    网络字节序 主机字节序.txt

    网络字节序 主机字节序

    络字节序、地址转换源代码

    当你编写网络程序时,你需要将本地字节序转换为网络字节序,或者反之,这一过程通常称为字节序转换。 Linux中,可以使用以下函数来进行字节序转换: 1. `htons()`(Host to Network Short):将主机字节序的短整型...

    c++和python如何实现主机字节序和网络字节序的相互转换

    在上一篇文章网络编程:主机字节序和网络字节序中,介绍了主机字节序和网络字节序的基本概念以及在实际的编程中,何时需要进行网络字节序和主机字节序的转换。本篇文章着重介绍使用c++和python语言,如何实现主机...

    点分十进制IP转换网络字节序

    网络中表示的IP地址与主机表示不同,本程序通过转换来表示。

    基于大端法、小端法以及网络字节序的深入理解

    例如,C语言的库函数`htonl()`(Host To Network Long)就用于将主机的字节序转换为网络字节序,对于32位整数来说,它会将小端法存储的整数转换为大端法。 上述提到的C程序展示了如何检查和转换字节序。程序首先...

    C++ 网络字节顺序转换函数、ip格式转换函数

    需要注意的是,这些函数只对网络字节序与主机字节序不同的平台有效。 - 自定义实现:对于不支持上述函数的环境,可以手动编写转换函数。例如,对于一个32位整数,可以分为4个8位字节,然后按照大端或小端规则重新...

    大小端字节序介绍几转换

    **网络字节序**通常采用大端字节序,这是因为网络协议(如TCP/IP)中规定了这种标准,以确保数据在网络传输过程中的一致性。在C++中,可以使用以下四个函数来完成主机字节序与网络字节序之间的转换: - `htons...

    字节序与位序

    在 CPU、总线、设备和网络协议中,字节序和位序都扮演着重要的角色。例如,在网络协议中,字节序和位序决定了数据的传输顺序。在 CPU 和总线中,字节序和位序决定了数据的存储和处理顺序。 字节序和位序是计算机...

    c++,java,php,c# 的网络字节流读写文件

    Java默认使用网络字节序,即大端模式。对于字节序转换,Java提供了`java.nio.ByteOrder`类,可以方便地在大端和小端之间切换。 PHP是另一种常用的Web开发语言,其文件操作主要通过`fopen`、`fwrite`和`fread`等函数...

    字节序、MSB、LSB.docx

    在实际应用中,如网络协议设计,如TCP/IP,通常规定使用网络字节序(Big-Endian)以确保不同平台之间的兼容性。开发者在编写跨平台软件时,需要考虑字节序问题,通过函数如htonl, ntohs, htonl, ntohs等进行字节序...

Global site tag (gtag.js) - Google Analytics