2011-05-26 26 views
0

如何將字符串轉換爲字節[]並將它們添加到流中。謝謝。我正在使用C++代碼,ubuntu。從字符串轉換爲字節[]並將結果添加到內存流

編輯: 我有一個std ::字符串作爲字符串值。 我需要一個方法,它將一個std :: string值作爲輸入並返回流值作爲輸出。

+0

什麼'string'的類型? 'std :: string','char *','wchar_t *',...? – xtofl 2011-05-26 12:53:52

+1

沒有足夠的信息。給出一個具體的例子,你的輸入和你期望的輸出。另外,我不認爲你有C++,因爲它沒有'byte'-數據類型。在C++中也沒有'memorystream'類。 – 2011-05-26 12:54:34

+0

我編輯了我的代碼。 THX :) – justM 2011-05-26 12:56:19

回答

1

只需撥打std::string.c_str()即可獲得指向字符串緩衝區的指針。這將返回const char*(其中charint8_t),您可以將其有效地用作byte[]。請記住,返回的指針指向由字符串對象管理的內存,因此如果在原始字符串類中更改了任何內容,則會使指針無效。此外,由於它是指向const char的指針,因此不應更改緩衝區中的任何值。所以,如果你需要更多的永久內存,或者需要一個緩衝區,你可以修改,一個更好的方法來完成你的目標將是要做的(使用gcc,這不應該是一個問題,因爲你在Ubuntu上):

std::string my_string; 
char string_array[my_string.length() + 1]; 
strcpy(string_array, my_string.c_str()); 

現在使用string_array作爲內存緩衝區。

如果你需要從一個函數返回緩衝區,你將不得不在堆上分配緩衝區並返回一個指針。這也意味着在完成它之後,你還必須在指針上調用delete [],否則你最終會發生內存泄漏。所以,你可以做到以下幾點:

#include <string> 
#include <cstring> 

char* return_buffer(const std::string& string) 
{ 
    char* return_string = new char[string.length() + 1]; 
    strcpy(return_string, string.c_str()); 

    return return_string; 
} 

//now use in code 
int main() 
{ 
    std::string some_string = "Stuff"; 
    char* buffer = return_buffer(some_string); 

    //...do something with buffer 

    //...after you're done with the buffer to prevent memory leak 
    delete [] buffer; 

    return 0; 
} 
+0

thx爲答案。我怎麼能把這個在返回string_array的方法? – justM 2011-05-26 13:06:55

+0

你能否發表一個例子? – justM 2011-05-26 13:17:15

+0

好的,發佈示例。 – Jason 2011-05-26 14:09:39

0

As Space_C0wb0y指出,C++沒有byte數據類型。 C#有一個。這是你想要的語言嗎?

如果你確定你正在處理C++,那麼我想你會使用一個字節大小的char數據類型。另外,要將std::string轉換爲char*(指向一堆char值的指針,終止於\0),則必須調用變量的c_str()函數。

0

目前尚不清楚你的意思由bytecharunsigned char?並且 我也不熟悉你的memorystream。只要

std::copy(input.begin(), input.end(), std::back_inserter(out)); 

如果需要某種翻譯,std::transform可能是 可用,:但是假設你 有std:;string,並希望將其追加到 std::vector<unsigned char>,你可以直接使用std::copy它是一個char到一個byte

+0

您意識到'back_inserter'會重複'push_back',這可能(並且會)導致內存分配?你可以通過'out.reserve(input.size())'來解決這個問題。 – xtofl 2011-05-26 13:23:07

+0

當然,但爲什麼要麻煩?如果分析器顯示分配和複製是瓶頸,則很容易添加,但在此之前,請保持簡單。 – 2011-05-27 11:09:10

0

你可以在你的字符串上使用c_str()作爲const char *來訪問字符串內容,這應該是你需要的。可能你會需要一個強制轉換,但它應該沒問題,因爲字符(通常是,並且在你的平臺上)是1個字節。

0
std::vector<char> bytes(myString.begin(), myString.end()); 

是一個簡單的解決方案