使用 write 函数将 double 写入标准输出

Writing double to stdout using the write function

我以二进制格式存储n双数如下:

int main(int argc, char** argv)
{
    int k = atof(argv[1]);
    int fd = open("./gen-double.bin", O_CREAT | O_WRONLY | O_TRUNC, 0666);

    for(double i = 1.0; i < k; i *= 1.333)
    {
        write(fd, &i, sizeof(double));
    }

    return 0;
}

我想知道是否可以使用 write 函数输出它们: 我尝试了以下代码,它给了我时髦的字符:

int main(int argc, char** argv)
{
    int fd = open("./gen-double.bin", O_RDONLY);
    double i;

    while(read(fd, &i, sizeof(double)))
    {
        write(STDOUT_FILENO, &i, sizeof(double));
        printf("\n");
    }    

    return 0;
}

我需要将这些数字转换为 char 吗?

编辑

完成

int main(int argc, char** argv)
{
    int     fd = open("./gen-double.bin", O_RDONLY);
    double  i;
    int     res;
    char    buffer[11];

    while(read(fd, &i, sizeof(double)))
    {
        res = sprintf(buffer, "%.10f", i);
        buffer[11] = '[=12=]';
        write(STDOUT_FILENO, buffer, 11);
        printf("\n");
    }    

    return 0;
}

您似乎正在将 double 的二进制编码写入 STDOUT。

printf(您通常会使用)在将二进制双精度值发送到 STDOUT 之前将其解码为文本。

例如:1.0 在内存中编码为 3ff0 0000 0000 0000 (see this)。

而文本 1.0 是字符“1”、“.”和“0”,编码为 0x31、0x2E、0x30 (from here)。