我想在 C 中以可移植的方式将一串很长的数字转换为双精度数。就我而言,可移植意味着它可以在 Linux 和 Windows 中工作。我的最终目标是能够将一串数字打包成一个 8 字节的 double 和 fwrite/fread 到/从二进制文件。该号码始终是无符号的。
我正在使用这个字符串来打包 4 位数的年份、2 位数的月份、2 位数的日期、4 位数的 HH:MM、1 位数的变量和 10 位数的值。因此,尝试将 23 个字节打包成 8 个字节。
我已经尝试了所有标准的东西:
char myNumAsString[] = "1234567890123456789";
char *ptr;
char dNumString[64];
double dNum;
dNum = atol(myNumAsString);
sprintf(dNumString, "%lf", dNum);
dNum = atof(myNumAsString);
sprintf(dNumString, "%lf", dNum);
dNum = strtod(myNumAsString, &ptr);
sprintf(dNumString, "%lf", dNum);
sscanf(myNumAsString, "%lf", &dNum);
sprintf(dNumString, "%lf", dNum);
这些都不起作用;他们都将最后几个数字四舍五入。任何便携的方式来做到这一点?