使用所有小数位的联合将 char 数组转换为 double
Convert char array to double using unions with all decimal places
我正在将项目从 Java 移植到 C。我需要将字节(= C 中的 char)数组转换为双精度。我在 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”。这看起来恰到好处,但问题是,将 Java 中的字节数组转换为 double 使用
ByteBuffer.wrap(array).order(ByteOrder.LITTLE_ENDIAN).getDouble();
returns 双值“0.17370544080815656”。
我确实需要双精度的这种高精度。我怎样才能在 C 中实现这一点?
编辑:
评论中的解决方案() ():
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
评论中的解决方案() ():
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
我正在将项目从 Java 移植到 C。我需要将字节(= C 中的 char)数组转换为双精度。我在 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”。这看起来恰到好处,但问题是,将 Java 中的字节数组转换为 double 使用
ByteBuffer.wrap(array).order(ByteOrder.LITTLE_ENDIAN).getDouble();
returns 双值“0.17370544080815656”。
我确实需要双精度的这种高精度。我怎样才能在 C 中实现这一点?
编辑:
评论中的解决方案(
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
评论中的解决方案(
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