一.背景 1.1 mips32搭載32bit vxworks操作系統 1.2 x86搭載64bit windows10操作系統 二.大小端模式判定前的準備 2.1 先要知道各種架構上各種整型數占據的bit數,也就是通過範圍來確定bit數 上一篇已經講過,特奉上地址如下: http://www.cnb ...
一.背景
1.1 mips32搭載32bit vxworks操作系統
1.2 x86搭載64bit windows10操作系統
二.大小端模式判定前的準備
2.1 先要知道各種架構上各種整型數占據的bit數,也就是通過範圍來確定bit數
上一篇已經講過,特奉上地址如下:
http://www.cnblogs.com/dakewei/p/7690847.html
2.2 mips32上的判定
代碼如下:
#include <stdio.h>
void main(void)
{
unsigned long int ul = 1;
unsigned char *p = &ul;
p += (sizeof(unsigned long) - 1); /*因為mips32上unsigned long 類型占據了32個bit,因此移動3個位元組,以便到達最後一個位元組*/
printf("*p = %d,p = %p,ul = %d,&ul = %p\n",*p,p,ul,&ul);
}
運行結果如下:
*p = 1,p = 0x80cf3fcb,ul = 1,&ul = 0x80cf3fc8
對運行結果進行分析如下:
先回憶大小端的定義:
大端模式: 低位數據存儲在高地址
小端模式:低位數據存儲在低地址
那麼記憶體中數據的存放情況如下:
-------------------
0x80cf3fc8 | 0x00 |
--------------------
0x80cf3fc9 | 0x00 |
--------------------
0x80cf3fca | 0x00 |
--------------------
0x80cf3fcb | 0x01 |
--------------------
由此可以判定:筆者的mips32機器是大端機器(筆者的這台mips32機器是可以設置大小端的)
2.3 x86上的判定
代碼如下:
#include <stdio.h>
void main(void)
{
unsigned long int ul = 1;
unsigned char *p = &ul;
p += (sizeof(unsigned long) - 1); /*因為x86上unsigned long 類型占據了64個bit,因此移動7個位元組,以便到達最後一個位元組*/
printf("*p = %d,p = %p,ul = %d,&ul = %p\n",*p,p,ul,&ul);
}
運行結果如下:
*p = 0,p = 0xffffcc07,ul = 1,&ul = 0xffffcc00
對運行結果進行分析如下:
先回憶大小端的定義:
大端模式: 低位數據存儲在高地址
小端模式:低位數據存儲在低地址
那麼記憶體中數據的存放情況如下:
-------------------
0xffffcc00 | 0x01 |
--------------------
0xffffcc01 | 0x00 |
--------------------
0xffffcc02 | 0x00 |
--------------------
0xffffcc03 | 0x00 |
--------------------
0xffffcc04 | 0x00 |
--------------------
0xffffcc05 | 0x00 |
--------------------
0xffffcc06 | 0x00 |
--------------------
0xffffcc07 | 0x00 |
--------------------
由此可以判定:筆者的x86機器是小端機器