深入理解计算机--字节顺序
来源:互联网 发布:精准扶贫平台 网络 编辑:程序博客网 时间:2024/06/05 11:35
在看深入理解计算机这本神书时看到一个地方挺有意思的。
一个多字节对象在内存中的排列顺序是什么样子的?在几乎所有的机器上多字节对象被存储为连续的字节序列,对象使用的地址为所用字节中的最小地址。例如假设一个32位系统下的int变量x的地址为0x100即&x的值为0x100,那么x的四个字节将会被存储在存储器的0x100、0x101、0x102、0x103位置。
它们的排列顺序主要有两种
小端法(little-endian)
最低有效字节排列在最前面的方式叫做小端法。比如32位int值为0x0123456,起始地址为0x100,那么在应用小端法的机器中,表示为
大端法(big-endian)
与小端法相对应,将最高有效字节排列在最前面的方式叫做大端法。还是一样的例子,32位int值为0x0123456,起始地址为0x100,那么在应用大端法的机器中,表示为
还用许多比较新的机器采用双端法(bi-endian),就是可以配置成大端或小端的机器来运行
总结与应用场景
没有技术上的原因选择哪个字节顺序排列,只要一直坚持一种就好了
下面是按字节输出内存中的值代码
下面是测试函数
调用
test_show_bytes(0x01234567);可以得到结果
67 45 23 01b4 a2 91 4bd4 fb 2d 00
应用场景一 网络数据传输
对于程序员来说选择,机器所使用的字节排列顺序是不可见的,无论为那种排列编程都会得到相同的结果。但是在有些时候字节顺序会成为问题。首先是在不同类型的机器之间通过网络传送二进制数据时,一个常见的问题是当小端法机器产生的数据传输到大端法机器时接受程序里的字节成了反序的。为了避免由于这个原因而产生错误网络程序的代码编写必须遵守已建立的关于字节顺序的规则,以确保发送方机器将他的内部表示转换成网络标准,而接受方将网络标准转化为它的内部表示。
应用场景二 机器码与某些破解工作
在查看和更改机器级代码时需要注意显示的内存地址之类的值可能是以大端法或者小端法排列的。另外在某些破解时也要注意机器采用的是大端法或者小端法,如在安装黑苹果时修改DSDT文件时,里面的值大多使用小端法排列
0 0
- 深入理解计算机--字节顺序
- 计算计算机字节顺序
- 关于计算机的字节顺序
- 深入理解字节对齐
- 深入理解计算机3
- 深入理解计算机4
- 深入理解计算机 第一章
- 用联合确定计算机的字节顺序
- 深入理解计算机笔记1
- 深入理解计算机操作系统(笔记)
- 深入理解计算机中的字符
- 深入理解计算机第一章总结
- 《深入理解计算机操作系统》资料
- 深入理解linux启动顺序
- 深入理解C语言字节对齐
- 深入理解JVM-字节码执行引擎
- 深入理解JVM06--字节码指令简介
- 深入理解JVM 一字节码详解
- SQL注入之SQLmap入门
- Java源码分析之Object
- VC控件大小和字体设置
- Latex中一些细节
- HDU 5206 Four Inages Strategy
- 深入理解计算机--字节顺序
- Android中Context
- LeetCode (11) Number of 1 Bits
- Four Inages Strategy hdu 5206
- Leapin' Lizards (hdu 2732 最大流)
- poj1001
- aidl学习
- C语言mmap()函数:建立内存映射
- 求矩阵的局部极大值