在低位优先的计算机中使用C++读取高位优先的二进制文件的方法

最近在跟老师做小学期项目,用到了mfcc。他们提供的工具生成了一个二进制频谱序列,并且提供了matlab方法对该文件进行读取,然而matlab用的不熟,想用cpp去解决之后的一系列问题,所以只能靠看matlab源代码分析出这个二进制文件的存储规范。然而这些mfc文件是用“高位优先”的方式去存储文件的,matlab在fopen中提供了以高位优先方式读取数据的参数选项,然而这个参数选项在cpp中没有。在网上查阅了大量的资料始终找不到现成的转换方法,只能自己动手写一个了。(对我来说这是新知识,不能保证我的分析是正确的)


首先来介绍一下什么叫做高位优先。

在计算机的编码中,有一个叫做字节序的东西,用来描述字节是从前段开始进入处理器还是从后端开始进入处理器。

高位优先(Big Endian)代表高地址位在整个地址位的前端

低位优先(Little Endian)代表低地址位在整个地址位的前端

具体的存储方式是这样的:

假设有一个4字节int类型,值为358,

它在低位优先机的表示方法是十六进制数:66 01 00 00

而它在高位优先机的表示方法是十六进制数:00 00 01 66

这样的话,文件的存储形式与读取方式就会发生多种匹配。

对于文件来说,文件的存储格式(高位优先或者低位优先)是不会根据cpu不同而变化的,它是用它本身的形式存储在硬盘之中。

但是对于cpu来说,不同方式解读这个文件就会得到不同的结果。


我们最常见的cpu大多都是以低位优先存储数据的,所以当我们调用cpp中的fread函数来读取高位优先的文件之后&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值