我正在使用的API返回一个字节序列作为std :: string。
如何将其打印到stdout,格式化为序列,十六进制或十进制。
这是我正在使用的代码:
int8_t i8Array[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
std::string i8InList(reinterpret_cast<const char*>(i8Array), 16);
std::string i8ReturnList;
client.GetBytes(i8ReturnList, i8InList);
cout << "GetBytes returned ";
std::copy(i8ReturnList.begin(), i8ReturnList.end(), std::ostream_iterator<int8_t>(std::cout << " " ));
我希望收到相同的输入,但顺序相反。但是这段代码打印的是:
GetBytes returned ☺☻♥♦♣
♫☼
注意:字节序列是一个任意的字节序列,它不是书面语言的表示。
答案 0 :(得分:3)
流将这些字节解释为字符,当控制台获取这些字符时,它将显示它应显示的编码。
使用例如int
为std::ostream_iterator
模板参数,而不是将其打印为数字。
答案 1 :(得分:3)
您可能希望将char
中存储的std::string
转换为int
,因此std::cout
不会将它们打印为字符,但就像普通整数。
要使用十六进制打印它们,请使用std::hex
,如下面的可编辑代码段(live on Ideone)中所示:
#include <iostream>
#include <string>
using namespace std;
inline unsigned int to_uint(char ch)
{
// EDIT: multi-cast fix as per David Hammen's comment
return static_cast<unsigned int>(static_cast<unsigned char>(ch));
}
int main()
{
string data{"Hello"};
cout << hex;
for (char ch : data)
{
cout << "0x" << to_uint(ch) << ' ';
}
}
<强>输出:强>
0x48 0x65 0x6c 0x6c 0x6f