【发布时间】:2021-08-17 23:21:18
【问题描述】:
每 3 位代表一行或一列。我需要每 3 位读取一次并将它们存储在一个变量中。
这是我目前的代码:
typedef unsigned char BYTE
void main()
{
FILE* fh = fopen("knightPath.bin", "rb");
checkFileOpening(fh);
BYTE ch ,ch1, ch2;
fread(&ch, sizeof(BYTE), 1, fh);
ch1 = ch >> 5; /* first 3 bits 'C' */
ch2 = ch << 3 >> 5; /* second 3 bits '5' */
fclose(fh);
}
问题是从字母 A 中读取位,因为我在变量 ch 中有 2 位,而下一位将在我从文件中读取的下一个 BYTE 中。
我想过使用面具,但我不确定如何。
有什么想法吗?我怎样才能解决这个问题?
谢谢
【问题讨论】:
-
始终检查
fopen()返回的FILE*是否为NULL。如果是NULL,你应该抛出一些错误。另外,检查fread()的返回值。 -
通过编写一个具有字节缓冲区(如
unsigned int)和位计数的函数。如果缓冲区中有足够的位,则提取它们并更新变量。如果不是,则从文件中读取另一个字节并将其与缓冲区合并。如果是结尾,return -1(例如)。 -
我在我的函数 checkFileOpening(fh); 中这样做了
-
请发布完整代码以便更好地分析。
-
@WeatherVane 你有代码示例吗?