变量在内存中的字节顺序是-----大端还是小端?
所谓大小端即对数据进行存放时字节顺序的区别,大端方式将高位存放在低地址,小端方式将高位存放在高地址。(一般来说cpu都采用的是小端字节序存储)
以栈来看(在这普及一个知识点:栈中存放数据是由高地址往低地址存,而堆中是从低地址往高地址存,形参都是在栈上开辟的,形参的传递是实参从右向左传递,所以形参中右侧的变量地址高于左侧的变量地址)
这里将一个32位的16进制(4字节)数举例eg:0X12345678(1k=1024个字节=1024BYTE=1024个ASCII码,1BYTE=8Bit(2进制),16进制的一位数代表2进制的4位数,即2的4次方减一,所以两位十六进制数即一个字节。)
所以如图即大小端的存储模式
地址偏移 |
大端模式 |
小端模式 |
0x00(低地址) |
12(高位) |
78(低位) |
0x01 |
34 |
56 |
0x02 |
56 |
34 |
0x03(高地址) |
78(低位) |
12(高位) |
例如,假设从内存地址0x0000 开始有以下数据:
0x12 0x34 0xab 0xcd
如 果我们去读取一个地址为0x0000 的四个字节变量,若字节序为大端,则读出结果为0x1234abcd;若字节序位小端,则读出结果为 0xcdab3412。如果我们将0x1234abcd 写入到以0x0000 开始的内存中,则小端和大端模式的存放结果如下:
地址 0x0000 0x0001 0x0002 0x0003
大端模式 0x12 0x34 0xab 0xcd
小端模式 0xcd 0xab 0x34 0x12
在这里我们可以调用程序测试一下我们所说的机器采用小端(使用共用体)字节序是否正确?
可验证我用的这个机器采用的时小端字节序。