【发布时间】:2015-08-10 12:01:06
【问题描述】:
我是新来的,所以我会尽量明确我的问题。我试图得到一个直接的答案,但是当我检查其他问题时,它们非常特别,我感到困惑。
我有一个二进制文件,我需要为我的项目读取它。我也有一份规格表,我正在根据这些规格阅读文件。所以我创建了一个 cpp 文件,并编写了一个简单的程序来读取每个元素。我使用 ifstream 和 read() 函数来读取文件。
问题是在规格表上,我知道我需要读取大小为 12 的位串。从细节来看,很明显我应该为每个元素读取 12 位。但我不确定是否可以逐位读取。其余元素以字节为单位读取。而且,如果我每次读取 2 个字节并使用位“掩码”仅获取 12 位,则在此之后读取的其余元素不会正确匹配。所以我的猜测是我真的只需要读取 12 位。
所以我的问题。是否可以从二进制文件中读取 12 位?还是逐位阅读? .我的意思是只有 12 个,没有读取字节然后屏蔽它们。
非常感谢。
【问题讨论】:
-
你能把实际的规范贴在上面说你需要以 12 位块读取的地方吗?我可以看到它们指定了 12 个字节而不是位。
-
@NathanOliver:一些通信协议的字段位长度不是 8 的倍数。请参阅 IP header
-
@stefaanv 是的,但整个标题仍然是 8 的倍数。
-
@NathanOliver:不过,如果你能在每个字段的字段中阅读,那就太好了,这就是我理解这个问题的方式。
-
谢谢大家。正如我在答案中看到的那样,我也指出了规格表。我目前只有一份印刷版,但我将直接向创建它的人询问。似乎有些东西不匹配……因为只有 1 个元素需要非字节多值。