簡體   English   中英

將靜態未簽名的char *分配給std :: vector <unsigned char>

[英]Assign Static unsigned char* to std::vector<unsigned char>

我的代碼中包含以下內容:

static unsigned char* table;
...
table = something here;

現在,我必須將此table分配給std::vector<unsigned char>類型的變量,但無法這樣做。 我在做:

unsigned char* buffer = (unsigned char*) table;
std::vector<unsigned char>::size_type size = strlen((const char*)buffer);
std::vector<unsigned char>static rawTable(buffer, buffer + size);
for(ByteBuffer::iterator it=rawTable.begin();it!=rawTable.end();++it)
    std::cout << "Raw Table: "<<*it<< std::endl;

我可以編譯代碼,但rawTable內沒有任何值。 請幫忙! 我已經驗證了變量table具有價值。 我對此表示感謝。 謝謝。

strlen給您字符串的長度,而不是任意存儲區域的大小。 如果您的table內部任何位置都有'\\0' ,則strlen會找到它並停止計數。

另外,通過將rawTable static變量,如果buffersize發生更改,它將不會更新其值。 static變量僅構造一次。

另外,如果應該使用數字數據表,則應將其轉換為數字非字符類型。 否則cout可能會將其解釋為ASCII碼。

您有一個類型為unsigned char*指針指向數組。

然后,您想將數組的每個元素推入std::vector<unsigned char> ,對嗎?

如果是這樣,關鍵是要知道數組的大小 您需要事先知道尺寸。 如果對您可見的全部是unsigned char*類型的指針,則通常無法使用某些關鍵字或函數來確定數組的大小。 您需要以某種方式將信息與指針一起傳遞。

如果類型為unsigned char*的指針指向以字符結尾的字符數組(例如{'f', 'o', 'o', '\\0'} ),則可以使用C -string函數strlen以僅使用指針來計算數組中的字符數。 但是,如果數組不是以null終止的數組,則將導致未定義的行為

當您具有size ,只需使用arrays元素填充std::vector

std::vector<unsigned char> v(arr, arr + size); // arr = pointer to array.

這就是為什么您應該使用標准庫中的容器而不是原始數組的原因,因為這些容器在內部跟蹤大小,並且您始終可以使用size()函數對其進行訪問。

對於恆定大小的數組,請使用std::array 例:

std::array<unsigned char, 3> arr{'f', 'o', 'o'}; // arr.size() == 3
// Print its contents.
for (auto c : arr) {
    std::cout << c << std::endl;
}

暫無
暫無

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

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