详解大小端

一.为什么有大小端

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。而例如在C语言中short占2个字节,那大小端则决定了这两个字节在系统中存放的顺序。

二.什么是大小端

1)小端(little-endian)就是高字节放在内存的高地址端

2)大端(big-endian)就是高字节放在内存的低地址

例如数字0x1234,这里0x12占的字节是高字节,在小端模式中它放在内存的高地址,如下:

低地址------>高地址

        0x34 | 0x12

而在大端模式中,则如下:

低地址------>高地址

       0x12 | 0x34

总的来说如果一张纸代表内存,纸的左上角是最小地址,我们平时写字的习惯就是大端模式,即把高字节写在低地址。

三.注意

数组不会存在大小端问题,大小端决定的是字节数大于等于2的类型的字节存放顺序。故下列代码此时的输出一定B,和大小端无关。:

char str[] ="AB";

char*  pStr = str;

pStr++;

print("%c",*pStr);

而字节则不一样,如下只有在大端的计算机上才显示“big”:

unsigned int num = 0x12345678;

char str = *(char*)#

if (str == 0x78) {

cout << "big" << endl;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,045评论 0 12
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,466评论 0 35
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,399评论 0 6
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,015评论 0 7
  • 这半个多月,太阳久违,阴雨成了主角。奇怪的是,我竟没有发霉,内心也没有长苔藓,反而像此刻一样,很喜欢这疏疏离离的雨...
    月光墨墨阅读 409评论 4 6