Little_endian和Big_endian的區別和C測試程式

gaopengtttt發表於2016-08-29
這裡簡單的進行描述一下也加深記憶
Little_endian:不管在記憶體和磁碟中儲存都是記憶體的低地址儲存數值的低位數
Big_endian:不管在記憶體和磁碟中儲存都是記憶體的低址儲存數值的高位數

注意這裡是數值,字串沒有這樣的問題。
比如626C 低位數就是6C高位數就是62

比如我們要儲存
0x626c

記憶體地址
低---------------->高 
Little_endian
6C  62
Big_endian
62  6C


我們用如下的程式進行驗證

點選(此處)摺疊或開啟

  1. #include<iostream>
  2. #include <string.h>
  3. #include<stdlib.h>
  4. #include<stdio.h>
  5. using namespace std;

  6. bool check(void)
  7. {
  8.         char* test = new char[2];
  9.         strcpy(test,"lb");
  10.         short *m=(short *)test;


  11.         printf("%s is test srting %c's ascii is %x,%c's ascii is %x\n",test,test[0],test[0],test[1],test[1]);
  12.         printf("short number is %x\n",*m);


  13.         if(*m == 0x626c)
  14.         {
  15.                 return false;
  16.         }
  17.         else if(*m == 0x6c62)
  18.         {
  19.                 return true;
  20.         }
  21.         else
  22.         {
  23.                 printf("UNKOWN ERROR!\n");
  24.                 exit(1);
  25.         }
  26.         delete [] test; 
  27. }


  28. int main(void)
  29. {
  30.         if(check())
  31.         {
  32.                 printf("Big_endian\n");
  33.         }
  34.         printf("Little_endian\n");
  35. return 0;
  36. }


輸出為:
lb is test srting l's ascii is 6c,b's ascii is 62
short number is 626c
Little_endian
我是LINUX下面跑的,用WINDOWS跑也是一樣的。
LINUX和WINDOWS都是Little_endian,佔時沒在AIX這樣的Big_endian測試


我們可以到我們的字串輸出任然是lb,l 的ascii是6c,b的ascii是62 ,但是當轉換為數字short int後
顯示為626c,那麼我們可以確認他為小端Little_endian。

可以參考
http://blog.163.com/yuyi_vc/blog/static/170371753201182511825105/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2124159/,如需轉載,請註明出處,否則將追究法律責任。

相關文章