WEB开发网
开发学院软件开发C++ 大端、小端问题详解 阅读

大端、小端问题详解

 2012-05-25 10:18:19 来源:WEB开发网   
核心提示:七、Big-Endian和Little-Endian转换现有的平台上Intel的X86采用的是Little-Endian,而像 Sun的SPARC采用的就是Big-Endian,大端、小端问题详解(5),那么在跨平台或网络程序中如何实现字节序的转换呢?这个通过C语言的移位操作很容易实现,例如下面的宏: #if defi

七、Big-Endian和Little-Endian转换

现有的平台上Intel的X86采用的是Little-Endian,而像 Sun的SPARC采用的就是Big-Endian。那么在跨平台或网络程序中如何实现字节序的转换呢?这个通过C语言的移位操作很容易实现,例如下面的宏:

 




#if defined(BIG_ENDIAN) && !defined(LITTLE_ENDIAN)
#define htons(A)   (A)             // Host to network short
#define htonl(A)     (A)            // Host to network long
#define ntohs(A)   (A)             // Network to host short
#define ntohl(A)    (A)             // Network to host long
#elif defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
#define htons(A)     ((((uint16)(A) & 0xff00) >> 8) | \
(((uint16)(A) & 0x00ff) << 8))
#define htonl(A)     ((((uint32)(A) & 0xff000000) >> 24) | \
(((uint32)(A) & 0x00ff0000) >> 8) | \
(((uint32)(A) & 0x0000ff00) << 8) | \
(((uint32)(A) & 0x000000ff) << 24))
#define ntohs htons
#define ntohl htohl
#else
#error "Either BIG_ENDIAN or LITTLE_ENDIAN must be #defined, but not both."

 

上一页  1 2 3 4 5 

Tags:大端 问题 详解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接