因为不明白为什么图像的数据会以BGR而不是RGB的方式存放到内存中,扯出了以前在计算机组成原理中学习过的内存大小端模式。记录下来,方便以后再复习。
在计算机系统中,内存的管理以字节为单位,1 byte=8 bit,一个字节的内容在内存中的存放顺序是固定的。
在C语言中,很多类型大小超过了1byte,例如int通常是4byte,多个字节的数据在内存中可以用两种方式对齐来排放,这两种方式就是大端模式和小端模式。
如:0x12345678
其中0x12是高位的数据,0x78是低位数据。
在内存中,可以按照地址的大小分为低地址和高地址
内存地址 大端模式 小端模式
低地址 |0x00440000| 0x12 0x78
|0x00440001| 0x34 0x56
|0x00440002| 0x56 0x34
高地址 |0x00440003| 0x78 0x12
1.小端模式(Little-Endian)就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。(x86采用小端模式 )
2.大端模式(Big-Endian)
就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。(在内存和字符串的排列一致,在内存中排列符合我们的习惯)
各自的优点就是对方的缺点:
小端模式:强制转换数据不需要调整字节内容;
大端模式:符号位的判定固定为第一个字节,容易判断正负。
参考博文:http://blog.csdn.net/ce123_zhouwei/article/details/6971544
原文:http://www.cnblogs.com/wangpei0522/p/3750390.html