![](/img/trans.png)
[英]How to convert std::vector<unsigned char> to vector<char> without copying?
[英]How to convert char* to std::vector?
我有一個char *變量:
// char* buffer;
// ...
fread (buffer, 1, lSize, pFile);
// ...
我怎樣才能將它轉換為std :: vector? 施法將給我一個錯誤。
std::vector<char> data(buffer, buffer + size);
詹姆斯麥克納利斯的回答是更好的,如果你能做到這一點。
為什么不使用std::vector
開頭:
std::vector<char> buffer(lSize);
std::fread(&buffer[0], 1, buffer.size(), pFile);
你不能在char *和vector之間進行轉換; 指針轉換導致結果與輸入具有完全相同的字節,因此除非您正在執行低級位操作,否則通常是個壞主意。
假設你想構建一個chars向量,你可以創建一個std::vector<char>
類型的新向量對象(注意你需要提供向量元素的類型),並通過傳遞它來從數組中初始化它。開始和結束指向構造函數的指針:
std::vector<char> vec(buffer, buffer+lSize);
請注意,第二個參數是“結束指針”,在C ++中很常見。 重要的是,它是緩沖區結束后的字符指針,而不是緩沖區中的最后一個字符。 換句話說,開始是包容性的,但結束是排他性的。
另一種可能性(因為你正在處理字符)是使用std::string
代替。 這可能是您想要的也可能不是(取決於您是將char *視為字符串還是字節數組)。 您可以以相同的方式構建它:
std::string str(buffer, buffer+lSize);
或者使用不同的構造函數,將大小作為第二個參數:
std::string str(buffer, lSize);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.