mips32和x86下的大小端模式判定


一.背景

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機器是小端機器

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM