c - 如何将二进制数(32 位)转换为十进制数?

标签 c binary ieee-754

我见过各种程序,可以将给定的十进制 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/

相关文章:

c++ - 如果 ieeefloat64 变量未在 C++ 中初始化,会发生什么情况?

floating-point - 使用浮点计算极坐标中两点之间的距离

C18伪变量

c - 如何共享现有内存?

c - 如何从(文本数据 bss dec hex)估计 RAM ROM 使用情况

c - C : Binary files 上的文件操作

c - 在 C 中使用线程的斐波那契数列

C++ 通过位移位和减法除法无法正常工作

java - 比较两个字节数组? ( java )

types - IEEE 754 float 无法准确表示的第一个整数是哪一个?