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

詳解C++ 存儲(chǔ)二進(jìn)制數(shù)據(jù)容器的幾種方法

 更新時(shí)間:2025年12月03日 11:13:10   作者:永不落幕的物語(yǔ)  
本文主要介紹了詳解C++ 存儲(chǔ)二進(jìn)制數(shù)據(jù)容器,包括std::vector、std::array、std::string、std::bitset和std::vector,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1.std::vector<uint8_t>(最常用)

std::vector 是動(dòng)態(tài)數(shù)組容器,搭配 uint8_t(無(wú)符號(hào)8位整數(shù),即1字節(jié))是存儲(chǔ)二進(jìn)制數(shù)據(jù)的首選方案,尤其適合長(zhǎng)度不確定的二進(jìn)制流(如文件內(nèi)容、網(wǎng)絡(luò)數(shù)據(jù)包)。

特點(diǎn):

  • 動(dòng)態(tài)大小:可隨數(shù)據(jù)量自動(dòng)擴(kuò)容,支持 push_back、resize 等操作,靈活處理變長(zhǎng)二進(jìn)制數(shù)據(jù)。
  • 連續(xù)內(nèi)存:元素在內(nèi)存中連續(xù)存儲(chǔ),可通過(guò) data() 方法獲取原始字節(jié)指針(uint8_t*),方便與 C 風(fēng)格接口(如系統(tǒng)調(diào)用、網(wǎng)絡(luò)函數(shù))交互。
  • C++11 增強(qiáng):支持移動(dòng)語(yǔ)義(std::move),避免大二進(jìn)制數(shù)據(jù)的拷貝開(kāi)銷(xiāo);支持初始化列表({0x01, 0x02, 0x03})快速初始化。

適用場(chǎng)景:

  • 讀取文件二進(jìn)制內(nèi)容(如圖片、音頻)。
  • 網(wǎng)絡(luò)通信中的緩沖區(qū)(發(fā)送/接收字節(jié)流)。
  • 動(dòng)態(tài)生成的二進(jìn)制數(shù)據(jù)(如加密后的字節(jié)序列)。

示例:

#include <vector>
#include <cstdint>  // 包含uint8_t

int main() {
    // 存儲(chǔ)二進(jìn)制數(shù)據(jù)(例如一個(gè)簡(jiǎn)單的協(xié)議包)
    std::vector<uint8_t> binary_data = {0x01, 0x02, 0xFF, 0x00};
    
    // 動(dòng)態(tài)添加數(shù)據(jù)
    binary_data.push_back(0x03);
    
    // 獲取原始字節(jié)指針,用于C風(fēng)格接口
    uint8_t* raw_ptr = binary_data.data();
    size_t size = binary_data.size();  // 字節(jié)數(shù):5
    return 0;
}

2.std::array<uint8_t, N>(固定大小二進(jìn)制數(shù)據(jù))

std::array 是 C++11 新增的固定大小數(shù)組容器,適合存儲(chǔ)長(zhǎng)度已知且固定的二進(jìn)制數(shù)據(jù)(如協(xié)議頭、固定大小的校驗(yàn)碼)。

特點(diǎn):

  • 編譯期固定大小:聲明時(shí)需指定長(zhǎng)度(如 std::array<uint8_t, 16> 表示16字節(jié)),內(nèi)存分配在棧上(或靜態(tài)區(qū)),無(wú)需動(dòng)態(tài)內(nèi)存管理。
  • 連續(xù)內(nèi)存:同 vector,支持 data() 獲取原始指針,性能優(yōu)于動(dòng)態(tài)數(shù)組。
  • 無(wú)額外開(kāi)銷(xiāo):相比 vector 沒(méi)有動(dòng)態(tài)擴(kuò)容的額外內(nèi)存(如容量管理的指針),空間效率更高。

適用場(chǎng)景:

  • 固定格式的二進(jìn)制協(xié)議頭(如16字節(jié)的TCP頭部部分字段)。
  • 哈希值、UUID等固定長(zhǎng)度的二進(jìn)制數(shù)據(jù)(如16字節(jié)的MD5結(jié)果)。
  • 嵌入式系統(tǒng)中對(duì)內(nèi)存分配有嚴(yán)格限制的場(chǎng)景。

示例:

#include <array>
#include <cstdint>

int main() {
    // 存儲(chǔ)16字節(jié)的固定二進(jìn)制數(shù)據(jù)(如UUID)
    std::array<uint8_t, 16> uuid = {
        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
        0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
    };
    
    // 訪問(wèn)單個(gè)字節(jié)
    uint8_t first_byte = uuid[0];  // 0x00
    return 0;
}

3.std::string(兼容字符串操作的二進(jìn)制數(shù)據(jù))

std::string 本質(zhì)是“字節(jié)序列容器”(C++標(biāo)準(zhǔn)未限制必須是字符串),可存儲(chǔ)包含空字符(\0)的二進(jìn)制數(shù)據(jù),適合需要同時(shí)支持字符串操作和二進(jìn)制存儲(chǔ)的場(chǎng)景。

特點(diǎn):

  • 兼容字符串API:可使用 substr、find 等方法處理二進(jìn)制數(shù)據(jù)中的片段,方便解析包含文本標(biāo)識(shí)的二進(jìn)制流(如HTTP協(xié)議中的二進(jìn)制附件)。
  • 連續(xù)內(nèi)存:支持 data()c_str() 獲取字節(jié)指針(注意 c_str() 會(huì)在末尾附加 \0,但 data() 在C++11中與 c_str() 等效,需謹(jǐn)慎處理)。
  • 注意事項(xiàng):二進(jìn)制數(shù)據(jù)中的 \0 不會(huì)被視為“結(jié)束符”,size() 方法會(huì)返回真實(shí)字節(jié)數(shù)(包含 \0)。

適用場(chǎng)景:

  • 存儲(chǔ)包含文本和二進(jìn)制混合的數(shù)據(jù)(如郵件中的MIME附件)。
  • 需要對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行子串查找、拼接等操作的場(chǎng)景。

示例:

#include <string>
#include <cstdint>

int main() {
    // 存儲(chǔ)包含空字符的二進(jìn)制數(shù)據(jù)
    std::string binary_str;
    binary_str += static_cast<char>(0x01);
    binary_str += static_cast<char>(0x00);  // 空字符,仍會(huì)被計(jì)入長(zhǎng)度
    binary_str += static_cast<char>(0x02);
    
    std::cout << "長(zhǎng)度:" << binary_str.size();  // 輸出3(包含空字符)
    return 0;
}

4.std::bitset<N>(固定大小比特序列)

std::bitset 用于存儲(chǔ)固定長(zhǎng)度的比特(bit)序列(而非字節(jié)),適合需要精確控制每一個(gè)比特的場(chǎng)景(如標(biāo)志位、壓縮存儲(chǔ)布爾值)。

特點(diǎn):

  • 比特級(jí)操作:支持單個(gè)比特的設(shè)置(set)、清空(reset)、翻轉(zhuǎn)(flip),以及批量邏輯運(yùn)算(與、或、異或)。
  • 編譯期固定大小:長(zhǎng)度 N 必須是編譯期常量(如 std::bitset<32> 表示32個(gè)比特)。
  • 空間高效:每個(gè)比特僅占1/8字節(jié),比 vector<bool> 更高效(無(wú)額外指針開(kāi)銷(xiāo))。

適用場(chǎng)景:

  • 存儲(chǔ)大量布爾標(biāo)志(如32個(gè)狀態(tài)標(biāo)志僅需4字節(jié))。
  • 協(xié)議中的比特位字段(如TCP頭部的控制位:SYN、ACK等)。
  • 比特級(jí)算法(如位掩碼、壓縮算法)。

示例:

#include <bitset>

int main() {
    // 32位比特序列,存儲(chǔ)標(biāo)志位
    std::bitset<32> flags;
    
    // 設(shè)置第0位和第2位(從0開(kāi)始)
    flags.set(0);
    flags.set(2);
    
    // 檢查第0位是否為1
    bool is_set = flags.test(0);  // true
    
    // 整體轉(zhuǎn)換為整數(shù)(獲取比特序列的數(shù)值)
    uint32_t value = flags.to_ulong();  // 二進(jìn)制101 → 十進(jìn)制5
    return 0;
}

5.std::vector<bool>(動(dòng)態(tài)比特序列)

std::vector<bool>vector 的特化版本,用于存儲(chǔ)動(dòng)態(tài)長(zhǎng)度的比特序列,本質(zhì)是“比特容器”(每個(gè)元素占1比特)。

特點(diǎn):

  • 動(dòng)態(tài)大小:長(zhǎng)度可在運(yùn)行時(shí)調(diào)整(如 push_back 添加比特),適合比特?cái)?shù)不確定的場(chǎng)景。
  • 空間優(yōu)化:比 vector<uint8_t> 節(jié)省空間(存儲(chǔ)1000個(gè)布爾值僅需約125字節(jié))。
  • 注意事項(xiàng):迭代器行為特殊(返回代理對(duì)象而非直接引用),部分操作效率可能低于 std::bitsetvector<uint8_t>。

適用場(chǎng)景:

  • 動(dòng)態(tài)生成的比特流(如編碼算法輸出的可變長(zhǎng)度比特序列)。
  • 存儲(chǔ)數(shù)量不確定的布爾狀態(tài)(如動(dòng)態(tài)篩選結(jié)果的標(biāo)志)。

示例:

#include <vector>

int main() {
    // 動(dòng)態(tài)比特序列
    std::vector<bool> bits;
    
    // 添加比特
    bits.push_back(true);   // 第0位:1
    bits.push_back(false);  // 第1位:0
    bits.push_back(true);   // 第2位:1
    
    // 訪問(wèn)第2位
    bool bit2 = bits[2];  // true
    return 0;
}

總結(jié)

C++ 中存儲(chǔ)二進(jìn)制數(shù)據(jù)的核心選擇及適用場(chǎng)景:

數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)單位大小特性核心優(yōu)勢(shì)適用場(chǎng)景
std::vector<uint8_t>字節(jié)動(dòng)態(tài)大小靈活、連續(xù)內(nèi)存、適合變長(zhǎng)數(shù)據(jù)網(wǎng)絡(luò)緩沖區(qū)、文件內(nèi)容、動(dòng)態(tài)字節(jié)流
std::array<uint8_t, N>字節(jié)固定大?。ň幾g期)無(wú)動(dòng)態(tài)開(kāi)銷(xiāo)、棧上分配協(xié)議頭、固定長(zhǎng)度哈希/UUID
std::string字節(jié)動(dòng)態(tài)大小兼容字符串操作,支持混合數(shù)據(jù)文本+二進(jìn)制混合數(shù)據(jù)、帶標(biāo)識(shí)的字節(jié)流
std::bitset<N>比特固定大?。ň幾g期)高效比特操作、空間緊湊標(biāo)志位、固定長(zhǎng)度比特字段
std::vector<bool>比特動(dòng)態(tài)大小動(dòng)態(tài)調(diào)整比特?cái)?shù),空間優(yōu)化變長(zhǎng)比特流、動(dòng)態(tài)布爾狀態(tài)集合

根據(jù)需求選擇:動(dòng)態(tài)字節(jié)流優(yōu)先用 vector<uint8_t>,固定字節(jié)用 array,比特級(jí)操作選 bitsetvector<bool>,混合文本和二進(jìn)制用 std::string。

到此這篇關(guān)于詳解C++ 存儲(chǔ)二進(jìn)制數(shù)據(jù)容器的幾種方法的文章就介紹到這了,更多相關(guān)C++ 存儲(chǔ)二進(jìn)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文讀懂C++中Protobuf

    一文讀懂C++中Protobuf

    Protocol Buffers 是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化、或者說(shuō)序列化,本文詳解了Protobuf的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • 淺析C/C++中sort函數(shù)的用法

    淺析C/C++中sort函數(shù)的用法

    做項(xiàng)目的時(shí)候,排序是一種經(jīng)常要用到的操作。如果每次都自己寫(xiě)個(gè)冒泡之類(lèi)的O(n^2)排序,不但程序容易超時(shí),而且浪費(fèi)寶貴的時(shí)間,還很有可能寫(xiě)錯(cuò)。STL里面有個(gè)sort函數(shù),可以直接對(duì)數(shù)組排序,復(fù)雜度為n*log2(n)。
    2014-09-09
  • C++實(shí)現(xiàn)貪吃蛇游戲

    C++實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語(yǔ)言單鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng)

    C語(yǔ)言單鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言單鏈表實(shí)現(xiàn)圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c++中移動(dòng)語(yǔ)義和完美轉(zhuǎn)發(fā)及易錯(cuò)點(diǎn)

    c++中移動(dòng)語(yǔ)義和完美轉(zhuǎn)發(fā)及易錯(cuò)點(diǎn)

    C++ 中的移動(dòng)語(yǔ)義和完美轉(zhuǎn)發(fā)是 C++11 引入的兩個(gè)重要特性,它們分別用于提高性能和靈活性,這篇文章主要介紹了c++中移動(dòng)語(yǔ)義和完美轉(zhuǎn)發(fā),需要的朋友可以參考下
    2023-09-09
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之滿二叉樹(shù)、完全二叉樹(shù)的節(jié)點(diǎn)數(shù)計(jì)算詳解

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之滿二叉樹(shù)、完全二叉樹(shù)的節(jié)點(diǎn)數(shù)計(jì)算詳解

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之滿二叉樹(shù)、完全二叉樹(shù)節(jié)點(diǎn)數(shù)計(jì)算的相關(guān)資料,通過(guò)代碼示例詳細(xì)展示了如何計(jì)算這兩種二叉樹(shù)的節(jié)點(diǎn)數(shù)量,包括總節(jié)點(diǎn)數(shù)、葉子數(shù)、度為1和度為2的節(jié)點(diǎn)數(shù),需要的朋友可以參考下
    2026-01-01
  • C++?Boost?Spirit精通教程

    C++?Boost?Spirit精通教程

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱(chēng)
    2022-11-11
  • 詳解如何用alpine鏡像做一個(gè)最小的鏡像并運(yùn)行c++程序

    詳解如何用alpine鏡像做一個(gè)最小的鏡像并運(yùn)行c++程序

    這篇文章主要介紹了詳解如何用alpine鏡像做一個(gè)最小的鏡像并運(yùn)行c++程序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的原理及實(shí)現(xiàn)方法

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的原理及實(shí)現(xiàn)方法

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的原理是通過(guò) malloc() 函數(shù)申請(qǐng)一塊連續(xù)的內(nèi)存空間,并返回其地址,通過(guò) free() 函數(shù)釋放該內(nèi)存空間。實(shí)現(xiàn)方法是通過(guò)在程序運(yùn)行時(shí)動(dòng)態(tài)地管理內(nèi)存,即在需要內(nèi)存時(shí)申請(qǐng),不需要時(shí)釋放,避免了靜態(tài)內(nèi)存分配的浪費(fèi)和不足
    2023-04-04
  • C語(yǔ)言用數(shù)組實(shí)現(xiàn)反彈球消磚塊

    C語(yǔ)言用數(shù)組實(shí)現(xiàn)反彈球消磚塊

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言用數(shù)組實(shí)現(xiàn)反彈球消磚塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論

延川县| 涿州市| 巴林右旗| 邳州市| 呈贡县| 钟祥市| 彭阳县| 湘阴县| 茌平县| 东平县| 巴林右旗| 文化| 稻城县| 温泉县| 常州市| 华坪县| 洞头县| 镇赉县| 襄城县| 丰城市| 盐城市| 色达县| 邵阳市| 焦作市| 金华市| 东辽县| 德惠市| 乌鲁木齐市| 杨浦区| 康保县| 丘北县| 阿合奇县| 宽甸| 文安县| 永川市| 寿阳县| 洪雅县| 辉县市| 晋中市| 延津县| 自贡市|