轉(zhuǎn)換:
我們發(fā)現(xiàn)一個字節(jié)是可以存放兩個十六進(jìn)制的數(shù)字的(一個字節(jié)最大可以存放的數(shù)是 0xFF),那如果給你一個十進(jìn)制數(shù)(比如 112233),如何快速地知道它在內(nèi)存中是如何存放的呢?
- 大端法很容易,直接將它轉(zhuǎn)換成十六進(jìn)制,然后依次存放即可:0x0001B669
- 小端法則比較麻煩,步驟依次如下:
* 轉(zhuǎn)換成十六進(jìn)制數(shù)(0x0001B669)
* 將八位數(shù)字的低四位和高四位互換(0xB6690001)
* 在低四位和高四位中,分別進(jìn)行兩兩互換(0x69B60100)
如何檢測你的機器是大端還是小端?
前邊已經(jīng)說過, 常見的個人電腦大多數(shù)都是使用小端, 但是我們都是我改變世界的程序猿, 不妨考慮小如何使用代碼來分辨?
其實不難, 通過將int強轉(zhuǎn)為插入單字節(jié), 判斷其實儲存位置:
#include <stdio.h>
int main()
{
int a = 0x2233;
char *b = (char *)&a;
if (*b == 0x22)
{
printf("大端!\n");
}
else
{
printf("小端!\n");
}
return 0;
}
彩蛋
大端和小端,事實上是來源于 Jonathan Swift 的《格列佛游記》一書。
以下是 Jonathan Swift 在 1726 年關(guān)于大小端之爭歷史的描述:
……我下面要告訴你的是,Lilliput 和 Blefuscu 這兩大強國在過去 36 個月里一直在苦戰(zhàn)。戰(zhàn)爭開始是由于以下的原因:我們大家都認(rèn)為,吃雞蛋前,原始的方法是打破雞蛋較大的一端,可是當(dāng)今皇帝的祖父小時候吃雞蛋,一次按古法打雞蛋時碰巧將一個手指弄破了,因此他的父親,當(dāng)時的皇帝,就下了一道敕令,命令全體臣民吃雞蛋時打破雞蛋較小的一端,違令者重罰。老百姓們對這項命令極為反感。歷史告訴我們,由此曾發(fā)生過 6 次叛亂,其中一個皇帝送了命,另一個丟了王位。這些叛亂大多都是由 Blefuscu 的國王大臣們煽動起來的。叛亂平息后,流亡的人總是逃到那個帝國去尋救避難。據(jù)估計,先后幾次有 11000 人情愿受死也不肯去打破雞蛋較小的一端。關(guān)于這一爭端,曾出版過幾百本大部著作,不過大端派的書一直是受禁的,法律也規(guī)定該派的任何人不得做官……
在他那個時代,Swift 是在諷刺英國(Lilliput)和法國(Blefuscu)之間持續(xù)的沖突。Danny Cohen,一位網(wǎng)絡(luò)協(xié)議的早期開創(chuàng)者,第一次使用這兩個術(shù)語來指代字節(jié)順序,后來這個術(shù)語就被廣泛地接納了。
好, 今天的知識點講解就到這里, 希望大家學(xué)習(xí)愉快.
本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/c/