大小端系统分析

什么是大端小端

大小端模式就是存储数据时,数据的高低位是怎么存储在地址的高低位上。
大端模式(Most Significant Byte,MSB):数据的高位,存放在地址的低位,即高位存低位,低位存高位。
小端模式(Least Significant Byte,LSB):数据的高位,存放在地址的高位,即高位存高位,低位存低位。
明显小端模式更符合我们日常记录书写的习惯,pc机一般都是小端模式。
当我们使用的pc机和待读取数据大小端不一致时候,要特别注意,要使用相应的方式进行读取数据,具体方式看下文。

//联合体判断
#include<stdio.h>  
union var{   
        int i; 
        char j; 
}data;  

int main(){  
    data.i = 1;
    if(j == 1)
    {
        printf("pc is 小端\n");
    }
    else
    {
        printf("pc is 大端\n");
    }
}  
//大小端转换
//网络字节序通常是打断,x86pc通常是小段
//如何实现大小端的数据转换。
htons(port);//端口通常为uint16
std:string IP;
inet_addr(IP.c_str());//将点分十进制转换为uint32,再调换字节序
//定义宏:
typedef unsigned int uint_32 ;  
typedef unsigned short uint_16 ;  
//大小端转换16位:
#define BSWAP_16(x) \   
    (uint_16)((((uint_16)(x) & 0x00ff) << 8) | \  
              (((uint_16)(x) & 0xff00) >> 8) \  
             )  
//大小端转换32位:
#define BSWAP_32(x) \   
    (uint_32)((((uint_32)(x) & 0xff000000) >> 24) | \  
              (((uint_32)(x) & 0x00ff0000) >> 8) | \  
              (((uint_32)(x) & 0x0000ff00) << 8) | \  
              (((uint_32)(x) & 0x000000ff) << 24) \  
             )  
//定义函数:
//大小端转换16位:
uint_16 bswap_16(uint_16 x)
{
    return (((uint_16)(x) & 0x00ff) << 8) | \
           (((uint_16)(x) & 0xff00) >> 8) ;
}
//大小端转换32位
uint_32 bswap_32(uint_32 x)  
{  
    return (((uint_32)(x) & 0xff000000) >> 24) | \  
           (((uint_32)(x) & 0x00ff0000) >> 8) | \  
           (((uint_32)(x) & 0x0000ff00) << 8) | \  
           (((uint_32)(x) & 0x000000ff) << 24) ;  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值