在C ++中将uint8_t数组转换为字符串

时间:2015-03-28 17:41:37

标签: c++ ostringstream uint8t

我有一个类型为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;

3 个答案:

答案 0 :(得分:3)

试试这个:

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()方法来获取包含您放入其中的所有内容的std::string

在将uint8_t值添加到int之前,您需要将ostringstream值转换为(int),因为如果不这样做,则会将它们视为字符。另一方面,如果它们确实表示字符,则需要删除std::ostringstream convert; for (int a = 0; a < key_size_; a++) { convert << std::uppercase << std::hex << (int)key[a]; } 强制转换以查看实际字符。


编辑:如果您的数组包含0x1F 0x1F 0x1F并且您希望您的字符串为1F1F1F,则可以使用std::uppercasestd::hex操纵器,如下所示:

{{1}}

如果您想返回小数和小写,则需要使用std::nouppercasestd::dec

答案 1 :(得分:3)

这对我有用:

#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));

答案 2 :(得分:0)

可能是最简单的方法

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

或 C 风格:

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