最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++字節(jié)序的深入理解

 更新時間:2022年02月20日 11:47:17   作者:英雄哪里出來  
本文主要介紹了C/C++字節(jié)序的深入理解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

字節(jié)序

        最近在看 redis 的內(nèi)存編碼,里面涉及到字節(jié)序相關(guān)的內(nèi)容。這里就當(dāng)復(fù)習(xí)一下,做個簡單的回顧。

        數(shù)據(jù)存儲在內(nèi)存中,是以字節(jié)為單位的,如果是單字節(jié)數(shù)據(jù)(如char、unsigned char、int8)就不會有字節(jié)序的問題。但是多字節(jié)數(shù)據(jù)(如 int、float、double)就要考慮字節(jié)序的問題了。字節(jié)序共分為兩種:大端序 和 小端序。

大端序

        數(shù)據(jù)的高位字節(jié)存儲在地址的低端;低位字節(jié)存儲在地址的高端。如圖所示,值為 0x12345678 的四字節(jié)整數(shù)在大端序的主機上的內(nèi)存排布。

小端序

        數(shù)據(jù)的高位字節(jié)存儲在地址的高端;低位字節(jié)存儲在地址的低端。如圖所示,值為 0x12345678 的四字節(jié)整數(shù)在小端序的主機上的內(nèi)存排布。

主機字節(jié)序和網(wǎng)絡(luò)字節(jié)序

         除了主機字節(jié)序,還有網(wǎng)絡(luò)字節(jié)序。主機字節(jié)序由CPU決定,Intel Core 經(jīng)測試都是小端字節(jié)序。而網(wǎng)絡(luò)字節(jié)序采用的是大端序。測試字節(jié)序可以通過一段 C 的源碼搞定。

#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int i;
    int x = 0x12345678;
    for (i = 0; i < sizeof(int); ++i) {
        unsigned char *p = ((unsigned char *)(&x)) + i;
        unsigned char v = *p;
        printf("%p 0x%d%d\n", p, v>>4, v & 0xf );
    }
    return 0;
}

         取得整數(shù) x 的首地址轉(zhuǎn)換成 unsigned char* 指針后再向前偏移 i 個單位,分別得到這 sizeof(int) 個字節(jié)的地址,然后用 * 取得每個地址上的值,通過位運算轉(zhuǎn)換成 16進制 輸出。
         Linux 系統(tǒng)可以通過指令獲取 CPU 的類型:

cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
4  Intel(R) Core(TM) i3-2120 CPU @ 3.30GHz

大端序和小端序的互轉(zhuǎn)

        大端序和小端序的互相轉(zhuǎn)換,其實就是內(nèi)存翻轉(zhuǎn),在知道一個整數(shù)或者一個指針的字節(jié)數(shù)的時候,就是做一個鏡像的交換。這里以 64位 整型為例:

void memrev64(void *p) {
    unsigned char *x = p, t;
 
    t = x[0];
    x[0] = x[7];
    x[7] = t;
    t = x[1];
    x[1] = x[6];
    x[6] = t;
    t = x[2];
    x[2] = x[5];
    x[5] = t;
    t = x[3];
    x[3] = x[4];
    x[4] = t;
}
 
uint64_t intrev64(uint64_t v) {
    memrev64(&v);
    return v;
}

        64位整數(shù)的字節(jié)數(shù)為8,所以在字節(jié)序進行轉(zhuǎn)換的時候:
        第0個字節(jié)和第7個字節(jié)交換;
        第1個字節(jié)和第6個字節(jié)交換;
        第2個字節(jié)和第5個字節(jié)交換;
        第3個字節(jié)和第4個字節(jié)交換;
        對于 32位整數(shù)、16位整數(shù)的情況,就更加簡單了,不再累述。

到此這篇關(guān)于C/C++字節(jié)序的深入理解的文章就介紹到這了,更多相關(guān)C語言 字節(jié)序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++通過類實現(xiàn)控制臺貪吃蛇

    C++通過類實現(xiàn)控制臺貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了C++通過類實現(xiàn)控制臺貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++結(jié)構(gòu)體初始化的10種寫法總結(jié)

    C++結(jié)構(gòu)體初始化的10種寫法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了10種C++中結(jié)構(gòu)體初始化的寫法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • C語言使用函數(shù)實現(xiàn)字符串部分復(fù)制問題

    C語言使用函數(shù)實現(xiàn)字符串部分復(fù)制問題

    這篇文章主要介紹了C語言使用函數(shù)實現(xiàn)字符串部分復(fù)制問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • c++智能指針的超詳細(xì)講解

    c++智能指針的超詳細(xì)講解

    c++程序設(shè)計中經(jīng)常會用堆內(nèi)存,程序員要自己管理內(nèi)存的申請和釋放,使用原始指針,容易造成堆內(nèi)存泄漏(忘記釋放),二次釋放,使用智能指針能更好的管理堆內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于c++智能指針的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++將txt文件內(nèi)容保存到數(shù)組的方法

    C++將txt文件內(nèi)容保存到數(shù)組的方法

    今天小編就為大家分享一篇C++將txt文件內(nèi)容保存到數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C++實現(xiàn)字符串元音字母反轉(zhuǎn)的兩種方法

    C++實現(xiàn)字符串元音字母反轉(zhuǎn)的兩種方法

    在處理字符串問題時,我們經(jīng)常需要對其中的字符進行操作,例如反轉(zhuǎn)、替換等,本文將詳細(xì)討論如何在C++中實現(xiàn)僅反轉(zhuǎn)字符串中的所有元音字母,并返回結(jié)果字符串,需要的朋友可以參考下
    2024-07-07
  • C/C++實現(xiàn)線性單鏈表的示例代碼

    C/C++實現(xiàn)線性單鏈表的示例代碼

    使用鏈存儲結(jié)構(gòu)的線性存儲結(jié)構(gòu)為線性單鏈表,本文將分別利用C語言和C++實現(xiàn)線性單鏈表,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • Species Tree 利用HashTable實現(xiàn)實例代碼

    Species Tree 利用HashTable實現(xiàn)實例代碼

    這篇文章主要介紹了Species Tree 利用HashTable實現(xiàn)實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Qt實現(xiàn)線程與定時器的方法

    Qt實現(xiàn)線程與定時器的方法

    本文主要介紹了Qt實現(xiàn)線程與定時器的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實現(xiàn)靜態(tài)鏈表

    C++實現(xiàn)靜態(tài)鏈表

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)靜態(tài)鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

高州市| 麦盖提县| 揭西县| 襄汾县| 北辰区| 读书| 通江县| 抚松县| 六枝特区| 青田县| 岳阳县| 周至县| 精河县| 娱乐| 昌吉市| 金平| 东乌珠穆沁旗| 清水河县| 平乡县| 根河市| 鸡泽县| 南川市| 台江县| 沅陵县| 寿宁县| 辛集市| 衢州市| 玉龙| 安顺市| 诏安县| 治多县| 枞阳县| 衡水市| 新丰县| 阳曲县| 乌拉特后旗| 万山特区| 当雄县| 陈巴尔虎旗| 密山市| 杭州市|