在 C++ 中将 bitset 转换为 int

Posted

技术标签:

【中文标题】在 C++ 中将 bitset 转换为 int【英文标题】:convert bitset to int in c++ 【发布时间】:2013-11-04 05:03:00 【问题描述】:

在 C++ 中。我将 bitset 初始化为 -3,例如:

std::bitset<32> mybit(-3);

有没有一种优雅的方式可以将mybit 转换为-3。因为 bitset 对象只有 to_ulongto_string 这样的方法。

【问题讨论】:

将其转换为 unsigned long,然后将其转换为 int。 作为the documentation says,std::bitset具有将值转换为ulong的功能。因此,正如@Barmar 所说,将 long 转换为 int。那你的问题是什么?在发布问题之前,您是否阅读过文档或尝试过任何事情? @Johnsyweb 他可能想处理负值,如他的示例所示。 ulong 转换为long,然后将intint(long(mybit.to_ulong())) 【参考方案1】:

使用to_ulong 将其转换为unsigned long,然后使用普通转换将其转换为int

int mybit_int;

mybit_int = (int)(mybit.to_ulong());

DEMO

【讨论】:

因为这是 C++,我建议使用 static_cast<int>(mybit.to_ulong()) 而不是 C 风格的演员表。 不工作,仍然吐出无符号整数。 -3 变成 251 @FluorescentGreen5 我添加了一个演示,表明它可以工作。 @ErkinAlpGüney 我认为他的建议是关于风格的——在 C++ 中,您应该使用模板语法而不是 C 语法进行强制转换,因为它使您的意图更清晰。但我不是一个纯粹主义者,我觉得冗长的语法令人反感。 @ErkinAlpGüney - 我的建议是关于操作的安全性。如果您使用static_cast,则代码对进来和更改类型的人更具弹性。 ***.com/a/103868/1517648我见过各种情况下 C 风格的演员都可以,直到有人改变了一些东西然后他们就没有了。 static_cast 会出现编译器错误。

以上是关于在 C++ 中将 bitset 转换为 int的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将字符或字符串转换为位集

在c ++中将负整数转换为二进制字符串

如何将 C++ 位集中的位范围子集转换为数字? [复制]

如何在golang中将bool转换为int8 [重复]

字符串合并处理:C++ bitset库和stoi()函数实践

如何在 C++ 中将数字转换为字符串,反之亦然