簡體   English   中英

將 uint8_t 數組轉換為 C++ 中的字符串

[英]Convert array of uint8_t to string in C++

我有一個 uint8_t 類型的數組。 我想創建一個字符串來連接數組的每個元素。 這是我使用 ostringstream 的嘗試,但之后字符串似乎為空。

std::string key = "";
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {                                               
  convert << key_arr[a]
  key.append(convert.str());
}

cout << key << endl;

嘗試這個:

std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
    convert << (int)key[a];
}

std::string key_string = convert.str();

std::cout << key_string << std::endl;

ostringstream類就像一個字符串生成器。 你可以給它.str()完成后你可以調用它的.str()方法來獲取一個std::string ,其中包含你放入的所有內容。

在將uint8_t值添加到ostringstream之前,您需要將它們轉換為int ,因為如果不這樣做,它會將它們視為字符。 另一方面,如果它們確實代表字符,則需要刪除(int)強制轉換以查看實際字符。


編輯:如果您的數組包含 0x1F 0x1F 0x1F 並且您希望您的字符串為 1F1F1F,則可以使用std::uppercasestd::hex操作符,如下所示:

std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
    convert << std::uppercase << std::hex << (int)key[a];
}

如果你想回到十進制和小寫,你需要使用std::nouppercasestd::dec

這對我有用:

#include <string>
#include <iostream>

int main()
{

    uint8_t arr[] = {'h', 'i'};

    std::string s;

    s.assign(arr, arr + sizeof(arr));

    std::cout << s << '\n';
}

您還可以使用字符串的構造函數:

std::string s(arr, arr + sizeof(arr));

可能最簡單的方法是

uint16_t arr[];
// ...
std::string str = reinterpret_cast<char *>(arr); 

或 C 風格:

std::string str = (char *) arr;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM