字节序问题(某些主机上字节输出,以及保存在硬盘后16进制字节是倒序的问题)

刚开始接触这个问题原因在于python的dbfRead包出了问题,想自己用c写一个DEF的解析包

先看问题所在:

我有一个DBF文件用NotePad++读出来后用16进制展示后头几行入下图所示

根据DBF的文件格式参照下面这个博客

http://www.xumenger.com/dbf-20160703/

可以看出此文件记录数应该是0x37010000条

但是我用DBF阅读器打开后查看其信息时是

然后311转为二进制是0x00000137

扎眼一看就感觉是个倒序。然后不停百度,终于见到如下博客:

https://blog.csdn.net/PROGRAM_anywhere/article/details/52005534

原文如下:

最开始学的时候不知道听谁说的linux和windows字节序不同,字节序由操作系统决定。

然而今天才明白
字节序不是由操作系统决定的,而是由cpu架构决定的
证明:
1.首先明确我们怎么确定cpu架构
CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。目前市面上的CPU指令集分类主要分有两大阵营,一个是intel、AMD为首的复杂指令集CPU,另一个是以IBM、ARM为首的精简指令集CPU。两个不同品牌的CPU,其产品的架构也不相同,例如,Intel、AMD的CPU是X86架构的,而IBM公司的CPU是PowerPC架构,ARM公司是ARM架构。
2.声明一下我的是X86架构
在windows下面我写了一个程序

#include<stdio.h>
int main()
{
    int i = 0x10203040;
    char *p = (char *)(&i);
    printf("内存地址 :%x  %x\n",p,*p);
    printf("内存地址 :%x  %x\n",p+1,*(p+1));
    printf("内存地址 :%x  %x\n",p+2,*(p+2));
    printf("内存地址 :%x  %x\n",p+3,*(p+3));
}

Windows中运行情况

Windows中运行情况
在我的虚拟机redhat中


发现都是低地址中都是放的低位字节★

3.我们还要了解到
端模式分为:小端字节序和大端字节序,也就是字节在内存中的顺序。

小端字节序:低字节存于内存低地址;高字节存于内存高地址。

大端字节序:高字节存于内存低地址;低字节存于内存高地址。

网络字节序:就是大端字节序。规定不同系统间通信一律采用网络字节序。

4.分析:(1)我的redhat和windows是共用一个cpu的,所以架构肯定是一样的(都是x86)。
(2)在redhat和windows中结果都是一样的(小端字节序)。

5.由此我们可以证明得字:节序不是由操作系统决定的,而是由cpu架构决定的

总结:不能全相信网上说的(比如这篇文章,差点误导我,但是也是这篇文章给我了好奇,去证明。http://blog.csdn.net/forestlight/article/details/6933528)当然这只是这篇文章的一个小不足,整篇文章也是写的很不错的。
————————————————
版权声明:本文为CSDN博主「帅东」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/PROGRAM_anywhere/article/details/52005534

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值