大端和小端问题

大端(Big-endian)和小端(Little-endian)是两种存储数据的字节序.


大端: 数据的最高位存储在起始地址单元处, 低位存储在最高地址单元处.
小端: 数据的最低位存储在起始地址单元处, 高位存储在最高地址单元处,
比如:将十六进制数 0x01234567 存储在地址 0x100 处:
大小端存储示意图

大端模式数据的高位(符号位)首先被机器取出, 便于快速判断正负.
小端模式数据按CPU读取顺序存储运算更高效.


大小端模式的判断: 取低地址一个字节的数据与数据的高8位或低8未比较.

bool is_big_endian()
{
    int num = 0x12345678;
    // 取出num的起始地址(指向4字节的int)
    // 强制转换为指向单字节的指针
    // 解引得到起始地址前8位所存储的值
    char low_adress_value = *(char*)#

    // 低地址处是高字节,则为大端
    if ( low_adress_value == 0x12 ){
        return true;
    }

    return false; 
}

大小端模式的转换: 利用宏和位运算.

// 实现16bit的数据之间的大小端转换
// 分别取高8位右移, 低8位左移
#define BLSWITCH16(A)   (  ( ( (uint16)(A) & 0xff00 ) >> 8  )    | \  
                           ( ( (uint16)(A) & 0x00ff ) << 8  )     )  

// 实现32bit的数据之间的大小端转换
// 第一个高8位左移至第二个低8位, 第二个高8位左移至第一个低8位
// 第一个低8位左移至第二个高8位, 第二个低8位左移至第一个高8位
#define BLSWITCH32(A)   (  ( ( (uint32)(A) & 0xff000000) >> 24) |\
         (((uint32)(A) & 0x00ff0000) >> 8) | \
         (((unit32)(A) & 0x0000ff00) << 8) | \
         (((uint32)(A) & 0x000000ff) << 32)  )

目前的使用情况是:

  • Intel的80×86系列芯片使用小端存储模式
  • ARM芯片默认采用小端,但可以切换为大端
  • MIPS芯片采用大端,但可以在大小端之间切换
  • 在网络上传输的数据普遍采用的都是大端
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
crc32是一种循环冗余校验算法,用于检测数据传输或存储过程中的错误。在计算机中,数据被表示为二进制数字,而大端小端则是指在存储或传输二进制数据时,高位字节和低位字节的存放顺序。 大端小端两种存储方式的区别可以用一个简单的例子来解释。假设要存储数字0x12345678,其中高位字节为0x12,低位字节为0x78。在大端存储方式下,高位字节先被存储在内存的低地址处,低位字节存储在高地址处,即0x12存储在低地址,0x78存储在高地址。而在小端存储方式下,则正好相反,即0x12存储在高地址,0x78存储在低地址。 对于crc32算法而言,它是将数据按照由高位到低位的顺序进行处理,并在计算过程中进行循环移位和异或运算。因此,crc32算法对于数据的存储顺序是敏感的。在大端存储方式下,高位字节存储在低地址,低位字节存储在高地址,因此crc32算法会按照从高位到低位的顺序处理数据。而在小端存储方式下,高位字节存储在高地址,低位字节存储在低地址,因此crc32算法会按照从低位到高位的顺序处理数据。 总而言之,crc32大端小端是指crc32算法对于数据存放顺序的敏感性。在大端存储方式下,高位字节存储在低地址,低位字节存储在高地址,对应crc32算法从高位到低位处理数据的顺序;而在小端存储方式下,高位字节存储在高地址,低位字节存储在低地址,对应crc32算法从低位到高位处理数据的顺序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值