我见过各种程序,可以将给定的十进制 float 转换为 IEEE 754 格式的二进制数。
现在,给定一个二进制数,如何让 C 程序将其转换为 float ?
示例:
Input: 01000001010010000000000001111111
Output: 12.50012111663818359375
最佳答案
我假设您的二进制表示形式为字符串
。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void setBit(uint32_t* f, int i) {
uint32_t mask = ((uint32_t)1) << i;
*f |= mask;
}
float readFloat(const char* bits) {
assert(strlen(bits)==8*sizeof(float));
assert(sizeof(uint32_t)==sizeof(float));
float f = 0;
int size = strlen(bits);
for (int i = 0; i < size; i++) {
int bit = bits[size-i-1]- 0x30;
if (bit) {
setBit((uint32_t*)&f, i);
}
}
return f;
}
int main(int argc, char *argv[]){
const char* bits = "01000001010010000000000001111111";
float f = readFloat(bits);
printf("%s -> %.20f", bits, f);
}
给予
01000001010010000000000001111111 -> 12.50012111663818359375
关于c - 如何将二进制数(32 位)转换为十进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29386403/