【问题标题】:Convert string containing binary representation into number - C将包含二进制表示的字符串转换为数字 - C
【发布时间】:2015-07-25 06:23:20
【问题描述】:

我有一个字符串上的二进制消息。该字符串包含诸如“10001000”之类的值,它被用作存储不同数据类型的二进制表示的缓冲区。我将解析数据,然后转换每个序列。我的斗争是将特定的 1 和 0 字符串转换为:整数、浮点数或双精度数。 int 的一个可能的解决方案是 strtol,但它并不能解决我所有的问题......

我读过很多关于人们试图创建包含数字二进制表示的字符串的讨论。但我的问题恰恰相反:一旦我有了一个二进制表示的字符串,就回滚数字。

欢迎任何想法或建议。

【问题讨论】:

  • 所以,你是说通过搜索 SO 得不到答案(好的,好的,提示,至少)?
  • 老实说不敢相信谷歌搜索相关的东西从来没有把你带到strtol()...
  • 在搜索框中键入“将二进制转换为 c 中的十进制”。收到大量关于同一问题的已提出问题
  • 确实如此,strtol 工作正常。问题是我可以对其他类型做同样的事情还是写下我自己的转换器?例如, strtod 仅在我将数字作为字符串(而不是数字的位作为字符串)时才有效。好吧,我仍然认为这是一个有效的问题。
  • 哦,谷歌又宕机了吗?

标签: c string data-conversion


【解决方案1】:

这真的很简单......

unsigned int number;
char str[33];
int i;
int s;

/* Read some 32-bit binary number in character representation in str. */
Do some stuff.

/* Convert from string to binary. */
number = 0;
s = strlen(str);
for (i = 0; i < s; i++)
  {
    if (str[i] == 0x00) break;
    if (str[i] == '0')
      {
        number |= 1;
        number << 1;
      }
    if (str[i] == '1')
      {
        number &= 0xFFFFFFFE;
        number << 1;
      }
  }

通常,您可以在 Google 或您的教科书中找到它。所以这次你是免费获得的。

编辑:

我注意到您还提到了 float 或 double。这些是由IEEE-754 标准定义的复杂数据类型。如果二进制字符串已经采用浮点表示,那么您可以使用联合来从无符号整数转换为浮点类型之一。代码如下:

union float_conversion_t
  {
    unsigned int i[2];
    float f;
    double d;
  };

在这里您可以填充一个或两个整数,然后读取浮点或双精度值。您可能需要根据机器的字长(32 位、64 位或其他)调整数组的大小。

【讨论】:

    【解决方案2】:

    感谢 Daniel 和所有其他有效的 cmets。

    主要问题是浮点/双精度转换是否可以与任何预先存在的函数一起使用。毕竟我的理解(如果我错了,请纠正我)是否定的。

    因此,必须通过浮点数的数学和转换(IEEE 754 在线的大量文档......)并使用 strtol 处理整数。很公平。

    可能对其他人有帮助:

    • Here's 二进制 IEEE 754 作为字符串到双精度的转换
    • 但是,如果您希望将诸如“1001.1101”(二进制点表示)之类的内容转换为浮点数,this guy 做得很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2014-06-14
      • 2015-08-03
      • 2017-02-23
      • 2014-08-03
      • 2010-10-16
      相关资源
      最近更新 更多