为什么 fwrite (with struct) 写入未知符号?

Why does fwrite (with struct) writes unknown symbols?

我想用 fwrite 函数将结构写入 txt 文件。当我 运行 我的程序时,我在 txt 文件中看到很多未定义的符号。为什么会发生,我该如何解决? 我的代码:

FILE *file = NULL;

file = fopen(TASK1_2_FILENAME, "wb");

if (!file) {
    printf("FATAL: File does not exist, exiting.");
    exit(EXIT_FAILURE);
}

Products product;
strcpy(product.date, "00:00:0000");
product.code = 12345;
product.quantity = 10;
product.price = 10.5;

fwrite(&product, sizeof(Products), 1, file);

fclose(file);

以及头文件中的结构:

typedef struct Product {
    char date[11];
    int code;
    int quantity;
    float price;
} Products;

结果:

您不能编写二进制数据并期望它是文本。您看到的行为是正常的、预期的和正确的。

例如,想一想数字 30000。这很容易适合两个字节的 short int。但是,在文本格式中,您至少有五个字节。如果你 fwrite() 两个字节到外部存储,它将是两个字节包含这些字节的数值,而不是每个数字的文本表示。

30000 的示例中,二进制表示为 01110101 00110000。这在 Intel 机器中是相反的,因为它们是 little-endian。这意味着您文件中的这两个字节可能是十进制的 48 和 118。如果您在本机使用 ASCII 的 PC 上将它们视为字符,它们应该分别显示为 0v