使用write函数将double写入stdout

时间:2016-11-01 12:59:05

标签: c linux io c99

我以二进制格式存储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] = '\0';
        write(STDOUT_FILENO, buffer, 11);
        printf("\n");
    }    

    return 0;
}

1 个答案:

答案 0 :(得分:2)

您似乎正在将双精度二进制编码写入STDOUT。

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

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

虽然文本1.0是字符'1','。'和'0'编码为0x31,0x2E,0x30(from here)。