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