大端 小端 魔數等概念

2021-07-23 14:09:32 字數 708 閱讀 3290

今天看caffe將mnist原始的二進位制資料轉成lmdb格式的時候,出現了大端儲存,小端儲存,魔數的概念,轉換資料的原始檔及函式在example/mnist/convert_mnist_data.cpp中。

魔數的概念:很多態別的檔案,其起始的幾個位元組的內容是固定的(或是有意填充,或是本就如此)。根據這幾個位元組的內容就可以確定檔案型別,因此這幾個位元組的內容被稱為魔數 (magic number)。

大端儲存與小端儲存:乙個部落格裡面寫的十分詳細,總體來說:大端儲存類似人的正常思維,小端儲存機器處理更方便

小端:

較高的有效位元組存放在較高的的儲存器位址,較低的有效位元組存放在較低的儲存器位址。

大端:較高的有效位元組存放在較低的儲存器位址,較低的有效位元組存放在較高的儲存器位址。

mnist原始資料檔案中32位的整型值是大端儲存,c/c++變數是小端儲存,所以讀取資料的時候,需要對其進行大小端轉換。

轉換的函式為:

uint32_t swap_endian(uint32_t val)
舉乙個例子:

將乙個32位的無符號整型變數(uint32)0x12345678從大端儲存轉成小端儲存,那麼轉換的結果應該變為:0x78563412

上面的函式就實現了這個功能,將0x12345678帶入,下面是我的演算過程:

實現了大端小端轉換。

大端數與小端數

大端數 big endian 和小端數 little endian 這兩個中文會讓人繞暈,從英文上是比較好理解的 首先從記憶體單元上來看 排列順序是這樣的,也就是從下往上增長,從右往左增長,當乙個指標指向乙個int型 四記憶體單元 的變數時,指標的位址是位址最低的記憶體單元 big endian 大...

大端與小端

網際網路使用網路位元組順序採用大端模式進行編址,大端儲存也稱為網路位元組序,因為tcp ip包在網路中傳輸時都要求以這種次序,以其他形式儲存資料的機器 主機位元組順序根據處理器的不同而不同,如powerpc處理器,使用大端模式,而pentuim處理器使用小端模式 則必須在傳送資料之前把首部轉換成網路...

大端與小端

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