【发布时间】:2022-01-09 08:26:48
【问题描述】:
我正在尝试将字节正确转换为字符串。但是转换后的字符串看起来像垃圾。我有以下代码:
#include <iostream>
#include <sstream>
#include <vector>
std::string HexString( std::vector<std::uint8_t> &bytes ) {
std::stringstream ss;
for ( std::int32_t i = 0; i < bytes.size(); i++ ) {
if(i != 0)
ss << ",";
ss << bytes[i];
}
return ss.str();
}
int main() {
std::vector<uint8_t> uuid = {
0x41,0x7c, 0xea, 0x9a,0xaf
};
std::string uuidString = HexString(uuid);
std::cout << "Should be equal" << std::endl;
std::cout << uuidString << std::endl;
std::cout << "0x41, 0x7c, 0xea, 0x9a, 0xaf" << std::endl;
return 0;
}
输出:
Both should be equal:
A,|,�,�,�
0x41, 0x7c, 0xea, 0x9a, 0xaf
正确的输出应该是:
Both should be equal:
0x41, 0x7c, 0xea, 0x9a, 0xaf
0x41, 0x7c, 0xea, 0x9a, 0xaf
任何建议将不胜感激。
【问题讨论】:
-
字符串不是字节,而是字符。您将获得具有这些十六进制值的字符的输出。为什么要一串二进制数据?
vector或array是使用二进制数据时使用的常规容器。 -
流“输出”运算符
<<将写入all 基于char的类型(并且uint8_t基于char)作为字符,而不是整数. -
正如@Someprogrammerdude 提到的,您得到了这些数字的相应字符。 0x41 对应“A”,0x7c 对应“|”等等。 ypu 打印的其他“奇怪字符”要么是不可打印字符,要么是扩展 ascii 表中的字符(参见值here)。