是否可以在 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<8>
,它不会包含不能在unsigned char
中表示的值。所以这可能是比char
更好的选择。您可以任由实现将超出范围的值转换为有符号类型。
我们不知道普通的char
是否已签名。我假设8
是一个例子。但我会解决的。
没错,这就是为什么我说unsigned char
可能是一个更好的选择,尽管只是“可能”,因为如果提问者真的需要char
,那么你首先说的是正确的,他们应该检查价值。为什么假设8
是一个例子,它不仅在问题中陈述了两次,而且想要转换为char
是bitset 的自然大小。 “我如何将bitset<127>
转换为字符”本来是一个更愚蠢的问题......
@SteveJessop:是的。这是检查的原因之一。
我什至没有想过使用bitset<8>
而不是unsigned char
或uint8_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?的主要内容,如果未能解决你的问题,请参考以下文章