我在字符串上有二进制消息。该字符串包含诸如“10001000”之类的值,并且它被用作缓冲区来存储不同数据类型的二进制表示。我将解析数据,然后转换每个序列。我的努力是将特定的1s和0s字符串转换为:integer,float或double。 int的一个可能的解决方案是strtol,但它并没有解决我的所有问题...
我读过很多关于人们尝试创建包含数字二进制表示的字符串的讨论。但我的问题恰恰相反:一旦我有一个带有二进制表示的字符串,就回滚数字。
欢迎任何想法或建议。
答案 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)