【问题标题】:Turning a char* into an uint8_t将 char* 转换为 uint8_t
【发布时间】:2020-04-12 08:55:18
【问题描述】:

假设我有一个看起来像这样的数组:{'0b00011000','0b10001000'} 如何将该数组中的每个元素转换为uint8_t,使其输出保持二进制格式。 (例如'0b10001000' == 0b10001000)。

有没有可以翻转这个的函数,还是我必须自己做函数?

附言我在投射时遇到“精度丢失”错误,当我绕过它时,它显然会丢失精度。

编辑:我最终发现使用位集而不是使用uint8_t

【问题讨论】:

  • 我认为char(8位有符号)在转换为8位无符号数据类型时不会失去精度
  • @muyustan 我认为如果编译器能够理解如何通过强制转换简单地从一种类型转换为另一种类型,那么它实际上会失去精度的问题更少,在这种情况下它不能并且如果它尝试你不会得到正确的结果。
  • @muyustan:那么,您认为编译器错误地告知精度有损失?请解释原因。我不明白。谢谢
  • @ArminMontigny 我不是专家,但是,如果我没有理解错误,对于标准 ASCII 字符,char 的整数值在 0 到 127 之间。扩展 ASCII 最多在 0 到 255 之间(如果它是无符号字符而不是字符)。因此,[0,255] 也是uint8_t 的范围,那么我认为它能够保存字符的值。 IF char 变量仅用于保存真实字符,而不是负值。
  • @FarhoodET 抱歉,这是新手。页面建议是把它放在下面作为答案,所以我做了

标签: c++ arrays char unsigned


【解决方案1】:

我找到了自己的答案:

您可以在 cpp 中使用 'bitsets' 并在其中转换字符串/char*

string s = "10011001";
std::bitset<8> binaryNum(string);

binaryNum 将保存值 10011001,而不是转换为 dec 或 hex。

【讨论】:

  • 请注意,字符串后面的所有参数都是不必要的,因为它们是适当的默认值。所以你可以更简单地写std::bitset&lt;8&gt; bin_num{string}
【解决方案2】:

你可以这样做

uint8_t out = 0;
for(int i=2; i<10; i++)
    if(arr[i])
        out += pow(2, i-2);

在性能方面当然不是最好的,但如果我理解这个问题,它应该可以工作。但是,如果您担心性能,您当然应该研究为什么要将 char 的值存储到 8 个数组中。

【讨论】:

  • 感谢您不想变得粗鲁。 i=2pow(2, i-2) 是由于是以 0b 开头的字符数组。
猜你喜欢
  • 1970-01-01
  • 2011-10-23
  • 2019-10-14
  • 2021-07-11
  • 2019-01-09
  • 2013-09-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多