大端、小端、魔数等概念

今天看caffe将mnist原始的二进制数据转成lmdb格式的时候,出现了大端存储,小端存储,魔数的概念,转换数据的源文件及函数在example/mnist/convert_mnist_data.cpp中。

魔数的概念:很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此)。根据这几个字节的内容就可以确定文件类型,因此这几个字节的内容被称为魔数 (magic number)。

大端存储与小端存储:一个博客里面写的十分详细,总体来说:大端存储类似人的正常思维,小端存储机器处理更方便

小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。

mnist原始数据文件中32位的整型值是大端存储,C/C++变量是小端存储,所以读取数据的时候,需要对其进行大小端转换。

转换的函数为:

uint32_t swap_endian(uint32_t val) {
    val = ((val << 8) & 0xFF00FF00) | ((val >> 8) & 0xFF00FF);
    return (val << 16) | (val >> 16);
}

举一个例子:

将一个32位的无符号整型变量(uint32)0x12345678从大端存储转成小端存储,那么转换的结果应该变为:0x78563412

上面的函数就实现了这个功能,将0x12345678带入,下面是我的演算过程:

实现了大端小端转换。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值