BigEndian(大端):低字节在高内存地址

LittleEndian(小端):低字节在低内存地址

也就是看低字节在高内存地址还是低内存地址,也就是看低字节在前还是高字节在前,低字节在前自然是小端,高字节在前就是大端。

所谓大小端,是指字节存储或传输时的顺序。

注:最小寻址单位是指特定的计算机硬件机构所支持的最小数据访问块大小。以
个人电脑为例,内存机构的最小寻址单位为1个字节(1 Byte)即8个bit。也就
是说,你无法单独访问1 bit的信息或者任意小于1字节的信息。个人电脑中的硬
盘部分最小访问单位为4KB(依厂商不同而有所区别,较早的硬盘该单位比较
小),这就是通常所讲的“硬盘按块寻址”,一块既指4KB的数据。

例如:

大小端字节序与字符集编码之间的联系就是BOM,即 Byte Order Mark,字节顺序标记。例如可以以utf16编码将数据存储到文件中,在文件头部,会存入BOM,以表示在读取数据的时候是按照大端读取还是小端读取。FEFF表示大端,FFFE表示小端。而utf-8由于其特殊的变长编码规则,导致它是可以自解释的,所以以utf-8编码存储、传输数据时可以选择不加入BOM,同时这也是推荐的方式。

因为utf-8代码单元为1字节,每个字节高位都有标识,每当读到一个字节时,可以根据其高位进行判断。如上图,如果读到0开头的字节,则此字节单独编码;如果读到110、1110、11110开头的字节,则接着读取对应个数的字节;如果读到10开头的字节,则继续读取,读到110、1110、11110开头的字节为止。

由此看来,无需BOM并且可以无视字节序。只是utf-8解码程序稍稍麻烦一些。

而utf-16编码方式的代码单元为2字节,则一个代码单元内的两个字节的先后顺序对读取会产生影响,必须指定字节序,否则只能靠猜。 
参考:

http://blog.csdn.net/joenqc/article/details/54891731 
http://www.cnblogs.com/skywang12345/p/3360348.html 
http://www.360doc.com/content/15/0915/14/26654031_499295872.shtml

在网络传输中,tcp协议采用大端字节序,也就是先接收到的字节为数据的高位。在不同的操作系统平台中,内存采用的字节序可能不同,x86和一般的OS(如windows,FreeBSD,Linux)使用的是小端模式。但比如Mac OS是大端模式。在不同平台之间进行网络传输时,需要进行特殊的转换,详见

http://www.cnblogs.com/fuchongjundream/p/3914770.html

在java中,通过 ByteOrder.nativeOrder() 方法可以判断当前平台采用的时大端字节序还是小端字节序。

public static ByteOrder nativeOrder() {
return Bits.byteOrder();
}
static ByteOrder byteOrder() {
if (byteOrder == null)
throw new Error("Unknown byte order");
return byteOrder;
} static {
long a = unsafe.allocateMemory(8);
try {
unsafe.putLong(a, 0x0102030405060708L);
byte b = unsafe.getByte(a);
switch (b) {
case 0x01: byteOrder = ByteOrder.BIG_ENDIAN; break;
case 0x08: byteOrder = ByteOrder.LITTLE_ENDIAN; break;
default:
assert false;
byteOrder = null;
}
} finally {
unsafe.freeMemory(a);
}
}

主要实现为static静态方法,首先为long分配了8个字节内存,然后为long分配了值,之后拿出long的第一个字节,如果为数据的高位,那么平台采用的是大端字节序,如果为数据的低位,那么平台采用的时小端字节序。

大端BigEndian、小端LittleEndian与字符集编码的更多相关文章

  1. 判断CPU是大端还是小端模式

    在小端模式中,低位字节放在低地址,高位字节放在高地址:在大端模式中,低位字节放在高地址,高位字节放在低地址.big-endian和little-endian,51单片机是典型的大端模式,Intel电脑 ...

  2. 转!大端模式&小端模式

    大端模式&小端模式   在C语言中除了8位的char型之外,还有16位的short型,32位的long型(要看具体的编译器),对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器 ...

  3. 关于byte[]字节传输的大端和小端小议

    当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-en ...

  4. 【转】如何判断CPU是大端还是小端模式

    原文网址:http://blog.csdn.net/ysdaniel/article/details/6617458 如何判断CPU是大端还是小端模式 http://blog.sina.com.cn/ ...

  5. 大端和小端(Big endian and Little endian)

    一.大端和小端的问题 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian 则相反,它 ...

  6. 大端和小端(big endian little endian)

    一.大端和小端的问题 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian 则相反,它 ...

  7. 03大端和小端(Big endian and Little endian)

    1.大端和小端的问题 ​ 对于整型.长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节),而 Little endian 则相反 ...

  8. 整型,长整型,无符号整型等 大端和小端(Big endian and Little endian)

    一.大端和小端的问题 对于整型.长整型.无符号整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节):而 Little endian ...

  9. 大端模式&小端模式、主机序&网络序、入栈地址高低问题

    一.大端模式&小端模式 所谓的“大端模式”,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处 ...

随机推荐

  1. canvas的一些问题记录

    canvas当被设置width时,原来绘制的内容,将会清空.

  2. Shell中 调用/引用/包含 另外的脚本文件的两种方法

    脚本 first (测试示例1) #!/bin/bash echo 'your are in first file' 问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 s ...

  3. Telnet技术白皮书

    转:http://www.cnpaf.net/Class/Telnet/200705/19978.html Telnet的应用不仅方便了我们进行远程登录,也给hacker们提供了又一种入侵手段和后门, ...

  4. ORACLE查看并修改最大连接数的具体步骤

      第一步,在cmd命令行,输入sqlplus 第二步,根据提示输入用户名与密码 1. 查看processes和sessions参数 SQL> show parameter processes ...

  5. webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc «(», expected punc

  6. ARP协议具体解释之ARP动态与静态条目的生命周期

    ARP协议详细解释之ARP动态与静态条目的生命周期 ARP动态条目的生命周期 动态条目随时间推移自己主动加入和删除. q  每一个动态ARP缓存条目默认的生命周期是两分钟.当超过两分钟,该条目会被删掉 ...

  7. iTOP-4412 开发板的 GPIO 是怎么操作的?

    Exynos4412 全部的 GPIO 都有固定的地址,为了方便操作这些 GPIO.Linux 内核 在 gpio-exynos4.h 里面定义了一些 GPIO 的宏.比如: #define EXYN ...

  8. React Router V4发布

    React Router V4 正式版发布,该版本相较于前面三个版本有根本性变化,遵循 Just Component 的 API 设计理念. 本次升级的主要变更有: 声明式 Declarative 可 ...

  9. Android.KungFu手机病毒原理及清理方法

    原文链接:http://jingyan.baidu.com/article/363872ec8ad56b6e4ba16fb1.html Android.KungFu手机病毒清理方法 浏览:3333 | ...

  10. cadence原理图和PCB互联显示成功但是不能高亮和database

    问题现象:cadence原理图和PCB互联显示成功但是不能高亮我的问题 解决:尝试修复数据库试试,Tools->Database check 提醒:有一个封装非法命名,在原理图中修改后 再次保存 ...