【发布时间】:2022-11-23 19:56:25
【问题描述】:
我正在尝试将 45 位二进制数转换为十六进制数,但在编译时出现溢出错误,但在在线 C++ 编译器上应用代码时,它起作用了。我的平台是 X64。请任何帮助。
int main()
{
stringstream ss;
string binary_str("111000000100010010100000110101001000100011000");
bitset<45> n(binary_str);
string f;
ss << hex << n.to_ulong() << endl; // error happens here
f = ss.str();
cout << f;
return 0;
}
当在在线 C++ 编译器上编译上面的代码时,我得到一个正确的结果,即 OX1c08941a9118。
【问题讨论】:
-
您真的将编译器设置为 x64 吗?也许您正在为 32 位编译?
-
@Klaus My VS-2022 在使用超过 32 个字符的字符串时给出错误,并且它被设置为 64 位构建。
-
Windows 使用LLP64 data model,所以 ulong 有 32 位。您必须改用 [to_ullong()] (cplusplus.com/reference/bitset/bitset/to_ullong)。