簡體   English   中英

我如何將布爾向量向量轉換為char數組?

[英]how can I memcpy bool vector to char array?

我有兩個向量。
一個是

std::vector<unsigned char> one_v;

另一個是

std::vector<bool> outputValuesInBits;

我將值同時推送到one_v和outputValuesInBits。
兩個向量都有兩個字節。
one_v [0]和[1]填充了2個字節的數據。
outputValuesInBits [0]至[15]填充了2個字節的數據。
現在,我想將數據(memcpy)復制到char數組。

我可以成功地從one_v向量復制數據,如下所示。

 unsigned char* output = new unsigned char[one_v.size()]();
 memcpy(&output, one_v.data(), 2);

但是我無法從outputValuesInBits復制數據。
如果我照做,

unsigned char* output = new unsigned char[outputValuesInBits.size()/8+1]();
memcpy(&output, outputValuesInBits.data(), 2);

它給我一個錯誤

error: invalid use of void expression
     memcpy(&output, outputValuesInBits.data(), 2);

誰能告訴我如何將布爾向量復制到char數組?

先感謝您!

std::vector<bool>沒有數據成員函數

恐怕您不能隨身攜帶。 vector上的Cplusplus頁上說: 該專業化與非專業化vector具有相同的成員函數,但本專業化中不存在的數據,emplace和emplace_back除外。 這意味着在嘗試使用data ,未定義的data會解釋錯誤。

如果不選擇可移植性,將沒有解決方案,因為存儲不一定是布爾值數組,但是庫實現可以優化存儲,以便將每個值存儲在單個位中。 (強調我的)。 我對may的理解是,您甚至無法確定將16個布爾值存儲在2個連續的字節中:該實現只能(幾乎)為您提供一種使用它們的方式,就好像它們存儲在16個不同的布爾值中一樣。

如果您忘記了可分區性,則必須找到當前實現的源,以了解字節數組的存儲位置和存儲方式……但這並不那么容易……

至少在g ++編譯器中,可以使用vector :: iterator的_M_p成員,該成員是指向數據的指針。

例:

std::vector<bool> vBool(16, false);
vBool[0] = true;
vBool[2] = true;
vBool[13] = true;
std::vector<unsigned char> vChar(2);
unsigned short *ptrUS = reinterpret_cast<unsigned short *>( &(vChar[0]) );
*ptrUS = *reinterpret_cast<unsigned short *>(vBool.begin()._M_p);

std::cout << (unsigned int)vChar[0] << " " << (unsigned int)vChar[1] << "\n";

給出輸出“ 5 32”,它對應於具有第一和第三位(5)和第六位(32)的數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM