大端小端在网络中的应用:
一、大小端程序判断
大端:高字节存放在低地址(即大数存放在底端)
小端:低字节存放在低地址
(即小数存放在底端)
-
#include <stdio.h>
-
#include <stdlib.h>
-
union word
-
{
-
int a;
-
char b;
-
} c;
-
int checkCPU(void)
-
{
-
c.a = 1;
-
printf("c.b=%d\n",c.b);
-
return (c.b==1);
-
}
-
int main(void)
-
{
-
int i;
-
i= checkCPU();
-
if(i==0)
-
printf("this is Big_endian\n");
-
else if(i==1)
-
printf("this is Little_endian\n");
-
return 0;
-
}
二、linux函数字节顺序转换
uint32_t htonl(uint32_t hostlong); //long host to net
uint16_t htons(uint16_t hostshort);//short host to net
uint32_t ntohl(uint32_t netlong); //long net to host
uint16_t ntohs(uint16_t netshort); //short net to host
三、宏定义实现
点击(此处)折叠或打开
-
//*****************************************************************************
-
// htonl/ntohl - big endian/little endian byte swapping macros for
-
// 32-bit (long) values
-
//*****************************************************************************
-
#ifndef htonl
-
#define htonl(a) \
-
((((a) >> 24) & 0x000000ff) | \
-
(((a) >> 8) & 0x0000ff00) | \
-
(((a) << 8) & 0x00ff0000) | \
-
(((a) << 24) & 0xff000000))
-
#endif
-
-
#ifndef ntohl
-
#define ntohl(a) htonl((a))
-
#endif
-
-
//*****************************************************************************
-
// htons/ntohs - big endian/little endian byte swapping macros for
-
// 16-bit (short) values
-
//*****************************************************************************
-
#ifndef htons
-
#define htons(a) \
-
((((a) >> 8) & 0x00ff) | \
-
(((a) << 8) & 0xff00))
-
#endif
-
-
#ifndef ntohs
-
#define ntohs(a) htons((a))
-
#endif
阅读(717) | 评论(0) | 转发(0) |