【问题标题】:My VS 2022 doesn't handle over than 32 bit bitset我的 VS 2022 无法处理超过 32 位的位集
【发布时间】: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)。

标签: c++ bitset


【解决方案1】:

unsigned long 是 32 位的 MSVC。同样在为 x64 编译时。你需要 unsigned long long 来获得一个 64 位整数,所以在这种情况下你可以使用 to_ullong

ss << hex << n.to_ullong() << endl;

【讨论】:

  • 搞定了!当别人告诉你答案时,答案是显而易见的。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
相关资源
最近更新 更多