【发布时间】:2020-02-26 09:53:29
【问题描述】:
假设,我想以 4 个字节将十进制 31 写入二进制文件(已加载到向量中),所以我必须写为 00 00 00 1f,但我不知道如何将十进制数转换为十六进制字符串(4字节)
因此,无符号字符向量中的预期十六进制为:
0x00 0x00 0x00 0x1f // int value of this is 31
为此,我尝试了以下操作:
std::stringstream stream;
stream << std::setfill('0') << std::setw(sizeof(int) * 2) << std::hex << 31;
cout << stream.str();
输出:
0000001f
上面的代码行以字符串格式提供输出,但我希望它以“0x”格式转换为无符号字符向量,所以我的输出向量在转换后应该有元素为 0x00 0x00 0x00 0x1F。
【问题讨论】:
-
你的问题是什么?像这样格式化还是获取向量中的值?
-
@Timo,我无法获取 unsigned char 向量中的值。
-
sizeof(int)可能不会像您认为的那样做。今天在所有常见平台上都是4,所以你得到setw(8)。 -
@hyde 这正是 OP 想要的。一个字节需要 2 个十六进制数字。因此,如果您想以十六进制显示
int,则需要sizeof(int) * 2数字。 -
“实际上假设,我想用 4 个字节将十进制 31 写入二进制文件”。如果你在二进制流中写入一个整数,这正是发生的情况。无需转换任何东西(给定正确的字节序)。
标签: c++