我想將C風格的字符串轉換爲字節向量。 工作解決方案將手動轉換每個字符並將其推送到矢量上。但是,我對這個解決方案並不滿意,並且希望找到一種更優雅的方式。以有效的方式將C字符串轉換爲std ::向量<byte>
我的一個嘗試的是以下幾點:
std::vector<byte> myVector;
&myVector[0] = (byte)"MyString";
哪些錯誤,並得到了我的
錯誤C2106: '=':左操作數必須是左值
這是做什麼的正確方法?
我想將C風格的字符串轉換爲字節向量。 工作解決方案將手動轉換每個字符並將其推送到矢量上。但是,我對這個解決方案並不滿意,並且希望找到一種更優雅的方式。以有效的方式將C字符串轉換爲std ::向量<byte>
我的一個嘗試的是以下幾點:
std::vector<byte> myVector;
&myVector[0] = (byte)"MyString";
哪些錯誤,並得到了我的
錯誤C2106: '=':左操作數必須是左值
這是做什麼的正確方法?
最基本的事情會是這樣的:
const char *cstr = "bla"
std::vector<char> vec(cstr, cstr + strlen(cstr));
當然,不計算長度,如果你知道這一點。
更常見的解決方案是使用std::string
類:
const char *cstr;
std::string str = cstr;
std::vector<byte> myVector;
const char* str = "MyString";
myVector.assign(str, str+strlen(str));
最明顯的問題是,爲什麼你不只是使用的std :: string:
std::string myString("MyString");
但如果你真的認爲你需要一個載體:
char myString[] = "MyString";
std::vector<byte> myVector(myString, myString+sizeof(myString));
您也可能要考慮使用std :: tr1 ::數組:
std::tr1::array<byte, sizeof("MyString")> myArray = {"MyString"};
的C++ 0x也將有std::array
。
對我來說更明顯的問題是:他從哪裏獲得char數組(除非某些庫函數分配並返回它)? – UncleBens 2009-10-16 22:13:20
STL容器如vector
總是取得所有權,即他們管理自己的記憶。您不能修改由STL容器內部管理的內存。出於這個原因,你的嘗試(以及任何類似的嘗試)註定要失敗。
唯一有效的解決方案是複製內存或編寫一個新的STL樣式容器,該容器不會佔用它訪問的內存的所有權。
您無法強制STL容器使用您分配的存儲空間,否。但是你可以通過'vector :: resize()'或'vector :: reserve()':)修改**容器的存儲空間。 – Unsigned 2013-05-03 04:55:48
allocator_traits怎麼樣?即如果您製作自定義allocator_traits並分配給矢量? – kvr 2016-03-01 22:47:15
@Konrad Rudolph - 我有類似的情況,我從argv(用空格隔開)接收幾個C風格的字符串,我希望將它們連接成一個單獨的矢量
東西沿着這些路線應該工作
std::vector<byte> myVector = std::vector((byte*)cstring, (byte*)ctring + strlen(cstring))
而且,這還是會剛剛通過的C字符串迭代和值插入載體。像康拉德說的那樣,這就是你如何去做,因爲矢量管理自己的記憶。
const char *cstr = "bla"
std::vector<char> vec;
vec.resize(strlen(cstr)+1);
strcpy(&vec[0],cstr);
必須使用std :: vetor以某種二進制格式存儲它。 –
Etan
2009-10-16 18:24:12