UNIX网络编程之字节序及转换

1. 对字节序的理解
endian指内存地址的低地址端,即内存地址增长的起始端。
little-endian: little指数据的低位字节,指低位字节存放在内存的低地址端,相应的高位字节存放在内存的高地址端;
big-endian: big指数据的高位字节,big-endian指高位字节存放在内存的低地址端,相应的低位字节存放在内存的高地址端。
网络字节序采用的是big_endian的字节序,符合人类的从左向右读数的习惯,即内存地址从小到大增长,读数也是从左向右读取。
需要转换的数据只限于对于多字节的整数,浮点数和字符串有一套独立的数据编码,不需要转换。
2. 主机字节序与网络字节序的互换函数(只有多字节整型数据需转换)
头文件<netinet/ih.h>
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);

3. 根据大小端的定义写出测试一台机器是大小端的简单方法

#include<stdio.h>
#include<netinet/in.h>
int main(int argc,char** argv)
{
  short num = 0x1234;

  unsigned char* ptr = (unsigned char*)(&num);

   printf("[0]: 0x%X addr:%u\n", pc[0], &pc[0]);     

   printf("[1]: 0x%X addr:%u\n", pc[1], &pc[1]);

  if((ptr[0] < ptr[1]) && (&ptr[0] < &ptr[1]))
  {
       printf("big endian\n");
  } 
  else
  {
       printf("little endian\n")
  }
  exit(0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值