Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将包含二进制表示的字符串转换为数字-C_C_String_Data Conversion - Fatal编程技术网

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

将包含二进制表示的字符串转换为数字-C,c,string,data-conversion,C,String,Data Conversion,我有一个字符串上的二进制消息。字符串包含诸如“10001000”之类的值,它被用作缓冲区来存储不同数据类型的二进制表示。我将解析数据,然后转换每个序列。我的任务是将1和0的特定字符串转换为:整数、浮点或双精度。int的一个可能解决方案是strtol,但它并不能解决我所有的问题 我读过很多关于人们试图创建包含数字二进制表示的字符串的讨论。但我的问题恰恰相反:一旦我有一个二进制表示的字符串,就回滚这个数字 任何想法或建议都将受到欢迎。这真的很简单 unsigned int number; char

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

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


任何想法或建议都将受到欢迎。

这真的很简单

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;
      }
  }

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

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

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

因此,必须仔细研究浮点的数学和转换(IEEE 754在线上的大量文档…)并使用strtol处理整数。很公平

它可能对其他人有帮助:

  • 二进制IEEE 754作为字符串到双精度的转换
  • 但是,如果您希望将类似“1001.1101”(二进制点表示)的内容转换为浮点,那么做得很好

那么,你是在告诉你,通过搜索,你不会得到答案(好的,好的,提示,至少是这样)?我真不敢相信谷歌搜索相关的东西从来没有让你在搜索框中键入“将二进制转换为十进制c”。收到了大量与matterIt相同的问题,strtol工作正常。问题是,我可以对其他类型执行相同的操作,还是只写下我自己的转换器?例如,只有当我将数字作为字符串(而不是数字的位作为字符串)时,strod才起作用。嗯,我仍然认为这是一个合理的问题。哦,谷歌又倒下了吗?
union float_conversion_t
  {
    unsigned int i[2];
    float f;
    double d;
  };