【发布时间】:2021-02-09 12:33:59
【问题描述】:
我创建了一个向量std::vector<uint8_t> vec{ 0x0C, 0x14, 0x30 };
我想在字符串“0CD430”中返回向量的值。
我创建了这个简单的代码:
std::string vectorTostring(const std::vector<uint8_t>& vec)
{
std::string result;
for (const auto& v : vec)
{
result += std::to_string(v);
}
return result;
}
在这种情况下,结果将为“122048”。哇,十六进制值存储在字节向量中,为什么我使用 to_string 得到的是十进制值而不是十六进制值?
【问题讨论】:
-
数字有不同的表示,但
12的值与0x0C的值相同。您正在寻找输出操纵器std::hex来打印十六进制表示 -
没有“十六进制向量”这样的东西。你有一个
uint8_t的向量,用 3 个用十六进制表示的数字进行了初始化。{ 0x0C, 0x14, 0x30 }与{ 12, 20, 48 }完全相同 -
清除,所以我需要使用一个函数将向量的每个元素转换为十六进制,然后再将其添加到结果中
-
@Edutox:正确。最终,计算机将其存储为位(二进制);所有其他格式都是替代表示。使用十六进制是因为每个半字节恰好有 4 位,并且
uint8_t中正好有 2 个半字节。另见`std::to_chars`,它可以以十六进制工作。