[英]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
變量,如果buffer
或size
發生更改,它將不會更新其值。 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.