計算機中多位元組儲存順序,小端 大端 網路位元組序

2022-09-16 21:21:28 字數 1390 閱讀 3996

1.  2在計算機中的儲存為10

2.  (x<<1) 等價於乘2

如果要有左右順序來看計算機記憶體的排列的話,那麼排序順序如下:

也就是記憶體從右到左公升序。

例子: 觀察int在計算機是如何儲存的

int a = 197121;//

0-3-2-1

int* p = &a;

char* cp = (char*)p;

std::cout

<< "

adrs:

"<< (int)cp << ", "

<< (int)*cp <<:endl>

std::cout

<< "

adrs:

"<< int(cp + 1) << ", "

<< (int)*(cp + 1) <<:endl>

std::cout

<< "

adrs:

"<< int(cp + 2) << ", "

<< (int)*(cp + 2) <<:endl>

std::cout

<< "

adrs:

"<< int(cp + 3) << ", "

<< (int)*(cp + 3) << std::endl;

結果:

可以發現,int型別中資料的低位與記憶體的低位相對應(小端模式)。

配合平時一直用的左移、右移操作即可發現儲存順序。

197121在記憶體中的表示為:

這篇文字很有靈性:

大小端問題主要涉及的是非單位元組非字串外的其餘資料的表示和傳遞。

網路位元組序

前面的大端和小端都是在說計算機自己,也被稱作主機位元組序。其實,只要自己能夠自圓其說是沒啥問題的。問題是,網路的出現使得計算機可以通訊了。通訊,就意味著相處,相處必須得有共同語言啊,得說普通話,要不然就容易會錯意,下了乙個小時的小電影發現打不開,理解錯誤了!

但是每個計算機都有自己的主機位元組序啊,還都不依不饒,堅持做自己,怎麼辦?

tcp/ip協議隆重出場,rfc1700規定使用「大端」位元組序為網路位元組序,其他不使用大端的計算機要注意了,傳送資料的時候必須要將自己的主機位元組序轉換為網路位元組序(即「大端」位元組序),接收到的資料再轉換為自己的主機位元組序。這樣就與cpu、作業系統無關了,實現了網路通訊的標準化。突然覺得,tcp/ip協議好任性啊有木有!

為了程式的相容,你會看到,程式設計師們每次傳送和接受資料都要進行轉換,這樣做的目的是保證**在任何計算機上執行時都能達到預期的效果。

深入理解計算機 位元組順序(大端 小端)

例題 乙個多位元組物件在記憶體中的排列順序是什麼樣子的?在幾乎所有的機器上多位元組物件被儲存為連續的位元組序列,物件使用的位址為所用位元組中的最小位址。例如假設乙個32位系統下的int變數x的位址為0x100即 x的值為0x100,那麼x的四個位元組將會被儲存在儲存器的0x100 0x101 0x1...

大端儲存和小端儲存 計算機儲存的大端法和小端法

01引言 在計算機記憶體中,通常是以位元組 byte 也就是 8 個位 bit 為基本儲存單元 也有以 16 位為基本儲存單元的 對於跨越多個位元組的資料型別 比如 int 長 4 個位元組 如何在記憶體中對這些位元組進行排序有兩種常見的方法 大端法 big endian 和小端法 little e...

計算機中的大小端儲存

大端和小端來自乙個小故事 端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian。小人國的內戰就源於吃雞蛋時是究...