c++
  • vector
  • 2009-10-16 23 views 5 likes 
    5

    我想將C風格的字符串轉換爲字節向量。 工作解決方案將手動轉換每個字符並將其推送到矢量上。但是,我對這個解決方案並不滿意,並且希望找到一種更優雅的方式。以有效的方式將C字符串轉換爲std ::向量<byte>

    我的一個嘗試的是以下幾點:

    std::vector<byte> myVector; 
    &myVector[0] = (byte)"MyString"; 
    

    哪些錯誤,並得到了我的

    錯誤C2106: '=':左操作數必須是左值

    這是做什麼的正確方法?

    回答

    8

    最基本的事情會是這樣的:

    const char *cstr = "bla" 
    std::vector<char> vec(cstr, cstr + strlen(cstr)); 
    

    當然,不計算長度,如果你知道這一點。

    更常見的解決方案是使用std::string類:

    const char *cstr; 
    std::string str = cstr; 
    
    +1

    必須使用std :: vetor 以某種二進制格式存儲它。 – Etan 2009-10-16 18:24:12

    0
    std::vector<byte> myVector; 
    const char* str = "MyString"; 
    myVector.assign(str, str+strlen(str)); 
    
    0

    最明顯的問題是,爲什麼你不只是使用的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

    +0

    對我來說更明顯的問題是:他從哪裏獲得char數組(除非某些庫函數分配並返回它)? – UncleBens 2009-10-16 22:13:20

    5

    STL容器如vector總是取得所有權,即他們管理自己的記憶。您不能修改由STL容器內部管理的內存。出於這個原因,你的嘗試(以及任何類似的嘗試)註定要失敗。

    唯一有效的解決方案是複製內存或編寫一個新的STL樣式容器,該容器不會佔用它訪問的內存的所有權。

    +1

    您無法強制STL容器使用您分配的存儲空間,否。但是你可以通過'vector :: resize()'或'vector :: reserve()':)修改**容器的存儲空間。 – Unsigned 2013-05-03 04:55:48

    +0

    allocator_traits怎麼樣?即如果您製作自定義allocator_traits並分配給矢量? – kvr 2016-03-01 22:47:15

    +0

    @Konrad Rudolph - 我有類似的情況,我從argv(用空格隔開)接收幾個C風格的字符串,我希望將它們連接成一個單獨的矢量,即 - 對於輸入:./MyExe AA BB CC DD - 我希望矢量 vec如下:vec = {A,A,B,B,C,C,D,D}。目前我的代碼首先從給定的輸入字符串構造一個std :: string,然後將其轉換爲向量(見下文)。有沒有更有效的方法來做到這一點? int main(int argc,char ** argv){ string inputStr;對於(int i = 1; i 2017-05-20 13:02:04

    0

    東西沿着這些路線應該工作

    std::vector<byte> myVector = std::vector((byte*)cstring, (byte*)ctring + strlen(cstring)) 
    

    而且,這還是會剛剛通過的C字符串迭代和值插入載體。像康拉德說的那樣,這就是你如何去做,因爲矢量管理自己的記憶。

    -2
    const char *cstr = "bla" 
    std::vector<char> vec; 
    vec.resize(strlen(cstr)+1); 
    strcpy(&vec[0],cstr); 
    
    相關問題