简体   繁体   English

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

[英]How can I convert a binary number (32 bit) to a decimal number?

I've seen various programs where I can convert a given decimal floating point number, to a binary in the IEEE 754 format. 我见过各种程序,可以将给定的十进制浮点数转换为IEEE 754格式的二进制。
Now, given a binary number, how can I get the program in C to convert it to a floating point number? 现在,给定一个二进制数,我如何在C语言中获取程序以将其转换为浮点数?

Example: 例:

Input:  01000001010010000000000001111111
Output: 12.50012111663818359375

I'm assuming you have the binary representation as a string . 我假设您将二进制表示形式表示为string

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

Gives

01000001010010000000000001111111 -> 12.50012111663818359375 01000001010010000000000001111111-> 12.50012111663818359375

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM