【发布时间】:2022-01-06 19:08:59
【问题描述】:
我正在尝试使用 std::hex 从文件中读取十六进制整数。
0
a
80000000
...
这些整数是正数和负数。
似乎 std::hex 无法处理负数。我不明白为什么,也没有看到文档中定义的范围。
这是一个测试台:
#include <iostream>
#include <sstream>
#include <iomanip>
int main () {
int i;
std::stringstream ss;
// This is the smallest number
// That can be stored in 32 bits -1*2^(31)
ss << "80000000";
ss >> std::hex >> i;
std::cout << std::hex << i << std::endl;
}
输出:
7fffffff
【问题讨论】:
-
如何知道十六进制数已签名? 0x80000000 将溢出
int,假设是 32 位int,然后所有的赌注都关闭了。好吧,也许不在 C++ 20 中,但我还没有用 20 做太多事情。 -
@user4581301 我想我想让 std::hex 推断出这个数字是负数,因为它正在读入一个 32 位整数。
-
我想解决方案是读入 unsigned int,然后强制转换为signed。
-
没有关于 cppreference 的好信息,我在标准中找不到任何说明 hex 不是无符号的东西。它只是将用于转换的基数设置为 16,然后走开。
-
@user4581301 非常感谢,如果您想将这些 cmets 作为答案,我很乐意接受。