使用 uint8_t 创建数组(CS50 Lab4:体积)

Creating an array using uint8_t (CS50 Lab4: Volume)

我正在研究 CS50 课程的实验 4,它需要读取始终为 44 字节的输入文件的 header 并将其写入输出文件的 header。以下是正确的解决方案。

    const int HEADER_SIZE = 44;
// TODO: Copy header from input file to output file
    uint8_t header[HEADER_SIZE];
    fread(header, HEADER_SIZE, 1, input);
    fwrite(header, HEADER_SIZE, 1, output);

课程网站上解释了如何创建 uint8_t 类型 header:

您可能想要创建一个字节数组来存储您将从输入文件中读取的 WAV 文件 header 中的数据。使用 uint8_t 类型来表示一个字节,您可以使用

这样的语法为 header 创建一个 n 字节的数组

uint8_t header[n];

用字节数替换 n。然后,您可以使用 header 作为 fread 或 fwrite 的参数来读取或写入 header.

知道uint8_t存储1个字节,我不明白我们如何用它定义一个44字节的数组。你能帮我看看这是怎么回事吗?非常感谢你! (这是我在这里的第一个问题,如果真的很愚蠢,请原谅)

在C语言中有不同类型的变量,如int、float、double、string exc...每个变量在内存中分配不同的大小。例如,如果我们说 int x;它分配 32 位,这意味着 4 个字节。在您的情况下 uint8_t 分配 1 个字节。如果你想在内存中分配 44 字节,你需要分配 44 乘以 1 字节。通过定义一个 uint8_t 数组,您分配了 1 个字节的内存;当你给出 44 的数组大小时,这意味着你为每个元素分配 1 个字节,总共 44*1 个字节。如果你声明 int,那会给你 44 * 4 个字节。我希望这对你来说很清楚。