首页 文章

使用具有所有小数位的联合将char数组转换为double

提问于
浏览
1

我正在将一个项目从Java移植到C.我需要将一个字节(= C中的char)数组转换为double . 我在Stack Overflow上找到了一个使用联合的解决方案(How to convert a byte array into double in C?) .

我的代码到目前为止:

#include <stdio.h>
double getDouble(char array[], int size) {
    union {
        double d;
        char bytes[size];
    } result;

    for (int i = 0; i < size; i++) {
        result.bytes[i] = array[i];
    }
    return result.d;
}

int main(int argc, char *argv[]) {
    char array[8] = {13, 67, -76, -39, -6, 59, -58, 63};
    printf("%f", getDouble(array, sizeof(array)));

    return 0;
}

这打印"0.173705" . 这看起来恰到好处,但问题是,使用 ByteBuffer.wrap(array).order(ByteOrder.LITTLE_ENDIAN).getDouble(); 将Java中的字节数组转换为double会返回双值"0.17370544080815656" .

我确实需要双倍的高精度 . 我怎样才能在C中实现这一目标?


EDIT:

评论中的解决方案(higher precision)(faster code):

double getDouble(char array[]) {
    double result;
    memcpy(&result, array, sizeof(result));
    return result;
}

int main(int argc, char *argv[]) {
    char array[8] = {13, 67, -76, -39, -6, 59, -58, 63};
    printf("%.17f", getDouble(array));

    return 0;
}

这打印出类似Java的“0.17370544080815656” . 我甚至可以提高精度 .

感谢@ user3121023 @ameyCU @Andrew Henle

1 回答

  • 1

    评论中的解决方案(higher precision)(faster code):

    double getDouble(char array[]) {
        double result;
        memcpy(&result, array, sizeof(result));
        return result;
    }
    
    int main(int argc, char *argv[]) {
        char array[8] = {13, 67, -76, -39, -6, 59, -58, 63};
        printf("%.17f", getDouble(array));
    
        return 0;
    }
    

    这打印出类似Java的“0.17370544080815656” . 我甚至可以提高精度 .

    感谢@ user3121023 @ameyCU @Andrew Henle

相关问题