大端模式与小端模式
2016-02-21 10:36
288 查看
小端机(Little-Endian)/大端机(Big-Endian)
Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
Intel X86 平台一般为小端机
举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:
大端模式:
低地址 —————–> 高地址
0x12 | 0x34 | 0x56 | 0x78
小端模式:
低地址 ——————> 高地址
0x78 | 0x56 | 0x34 | 0x12
大端小端没有谁优谁劣,各自优势便是对方劣势:
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
方法之二:
[2] 详解大端模式和小端模式
Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
Intel X86 平台一般为小端机
举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:
大端模式:
低地址 —————–> 高地址
0x12 | 0x34 | 0x56 | 0x78
小端模式:
低地址 ——————> 高地址
0x78 | 0x56 | 0x34 | 0x12
大端小端没有谁优谁劣,各自优势便是对方劣势:
小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。
大小端的判断
使用 unionbool isLittleEndian() { union { int a; char b; } foo; foo.a = 1; // 00 00 00 01 return foo.b == 1; // 保留最前的 00,也即高位字节存放在低地址,为大端机 // 还是最后的 01,也即低位字节存放低地址,为小端机 }
int ==》 char[4]
仍然是妙不可言的 unionunion { unsigned int a; unsigned char buf[4]; } foo; foo.a = 0x12345678; printf("%x, %x, %x, %x\n", foo.buf[0], foo.buf[1], foo.buf[2], foo[3]); // 小端机的输出为:78, 56, 34, 12 // 大端机的输出为:12 34 56 78
方法之二:
unsigned int a = 0x12345678; unsigned char bytes[4]; bytes[0] = (a >> 24) & 0xff; bytes[1] = (a >> 16) & 0xff; bytes[2] = (a >> 8) & 0xff; bytes[3] = a & 0xff;
References
[1] Converting an int into a 4 byte char array (C)[2] 详解大端模式和小端模式
相关文章推荐
- 关于破解AI的补丁和方法
- Android 使用Shell脚本截屏并自动传到电脑上
- 浅谈数字舵机与模拟舵机区别
- CodeForces 630 K. Indivisibility(容斥)
- 用UIInterpolatingMotionEffect产生透视效果
- PHP程序的常见漏洞攻击分析
- Design Support Library(五)具有过度效果的布局 Layout
- Design Support Library(四)具有过渡效果的菜单控件
- CF_527A_PlayingWithPaper
- 用TypeScipt和AMD模块化理念实现React官方教程(五)提交和更新数据
- Design Support Library(三)符合 MD 设计的菜单控件
- Design Support Library(二) 常规控件的使用介绍
- OJ 系列之重复的电话号码(C_C++)
- java发送短信系列之限制日发送次数
- 为什么构造函数不能为虚函数
- 前端文摘:深入解析浏览器的幕后工作原理
- 第一次写博客,想记录一下自己脱离新手村以后的升级过程
- 计算机系统要素:第十一章 编译器:代码生成
- Design Support Library(一) 介绍和安装
- npm package.json字段简介