是否可以在 C++ 中将 bitset<8> 转换为 char?

Posted

技术标签:

【中文标题】是否可以在 C++ 中将 bitset<8> 转换为 char?【英文标题】:Is it possible to convert bitset<8> to char in c++? 【发布时间】:2012-06-19 13:24:08 【问题描述】:

我有bitset v8,它的值类似于“11001101”,如何将其转换为char?我需要一封信。比如字母“f”=01100110。

附:感谢帮助。我需要这个来说明位中的随机错误。例如,没有错误 f,有错误,比如 ♥,等等,所有文本都在文件中。在文本中您可以清楚地看到此类错误。

【问题讨论】:

拜托,你甚至没有改变示例值。 我认为这家伙实际上是在问如何将 bitset 转换为单个字符,而不是数组。 如果我理解这个问题是关于从整个位集中获取单个标量 char(),而不是数组 【参考方案1】:
unsigned long i = mybits.to_ulong(); 
unsigned char c = static_cast<unsigned char>( i ); // simplest -- no checks for 8 bit bitsets

上述内容应该可行。请注意,位字段可能包含无法使用普通 char 表示的值(它是否已签名由实现定义)——因此您应该在转换之前始终检查。

char c;
if (i <= CHAR_MAX) 
c = static_cast<char>( i );

【讨论】:

虽然如果它是bitset&lt;8&gt;,它不会包含不能在unsigned char 中表示的值。所以这可能是比char 更好的选择。您可以任由实现将超出范围的值转换为有符号类型。 我们不知道普通的char 是否已签名。我假设8 是一个例子。但我会解决的。 没错,这就是为什么我说unsigned char 可能是一个更好的选择,尽管只是“可能”,因为如果提问者真的需要char,那么你首先说的是正确的,他们应该检查价值。为什么假设8 是一个例子,它不仅在问题中陈述了两次,而且想要转换为char 是bitset 的自然大小。 “我如何将bitset&lt;127&gt; 转换为字符”本来是一个更愚蠢的问题...... @SteveJessop:是的。这是检查的原因之一。 我什至没有想过使用bitset&lt;8&gt; 而不是unsigned charuint8_t 的原因。我敢肯定有一些:-)【参考方案2】:

提供的解决方案对我不起作用。我在 g++ 9 中使用 C++14。但是,我能够通过以下方式获得它:

char lower = 'a';
bitset<8> upper(lower);
upper.reset(5);
cout << (char)upper.to_ulong() << endl;

我敢肯定,这可能不是最好的方法,但它对我有用!

【讨论】:

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

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

C++简单版BitSet求解大量数据是否存在莫个数

c++中 bitset例子运行结果

在 C++ 中将 const vector<uint8_t> 转换/转换为 const vector<char>

java中的Bitset

是否可以在 C++ 中将返回值移动语义与受保护的复制构造函数一起使用?