将包含二进制表示的字符串转换为数字 - C

时间:2015-05-13 19:34:15

标签: c string data-conversion

我在字符串上有二进制消息。该字符串包含诸如“10001000”之类的值,并且它被用作缓冲区来存储不同数据类型的二进制表示。我将解析数据,然后转换每个序列。我的努力是将特定的1s和0s字符串转换为:integer,float或double。 int的一个可能的解决方案是strtol,但它并没有解决我的所有问题...

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

欢迎任何想法或建议。

2 个答案:

答案 0 :(得分:0)

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

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从unsigned int获取其中一个float类型。代码如下:

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

在这里,您可以填充一个或两个整数,然后读取float或double值。您可能需要根据计算机的字大小(32位,64位或其他)调整阵列的大小。

答案 1 :(得分:0)

感谢Daniel和所有其他有效的评论。

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

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

它可能对其他人有所帮助:

  • Here's将二进制IEEE 754转换为字符串为double
  • 但是如果你想要转换像&#34; 1001.1101&#34; (二进制点表示)浮动,this guy做得很好