在c中检查二进制文件时,我是按位还是按字节?

在c中检查二进制文件时,我是按位还是按字节?,c,offset,binaryfiles,C,Offset,Binaryfiles,我有一个长的二进制字符串,它包含许多字节, 我需要使用fseek获取字符串中的特定字节 我知道我需要计算偏移量,但我不确定偏移量 按位或字节计算。例如,如果我需要进入第三个字节 我需要将指示器提前3或(3*8=)24?将偏移量作为字节数,而不是位: 新位置,以字节为单位,从文件开头开始测量,应通过向whence指定的位置添加偏移量来获得。(重点是我的) 该函数为流指向的流设置文件位置指示器。通过将偏移量字节添加到从何处指定的位置,可以获得新位置,单位为字节 如果从何处设置为SEEK\u set、

我有一个长的二进制字符串,它包含许多字节, 我需要使用
fseek
获取字符串中的特定字节

我知道我需要计算偏移量,但我不确定偏移量 按位或字节计算。例如,如果我需要进入第三个字节 我需要将指示器提前3或(3*8=)24?

将偏移量作为字节数,而不是位:

新位置,以字节为单位,从文件开头开始测量,应通过向whence指定的位置添加偏移量来获得。(重点是我的)

该函数为流指向的流设置文件位置指示器。通过将
偏移量
字节添加到
从何处
指定的位置,可以获得新位置
,单位为字节

如果从何处设置为
SEEK\u set、SEEK\u CUR或SEEK\u END
,则偏移量分别相对于文件的
开头、当前位置指示器或文件的结尾

如果您正在使用文本文件

First Byte position  ==>  fseek(fp,0,SEEK_SET);
Second Byte position ==>  fseek(fp,1,SEEK_SET);
Third Byte position  ==>  fseek(fp,2,SEEK_SET); 

只需指定
字节数
而不是字节数*8

不要硬编码
8
。改用字符位。这不仅是因为某些平台的字节大小为16、32或9,还因为人类读者无法分辨
8
是字节中的位数还是单词中的字节数,还是八度音阶中的音符数,还是章鱼的腿数。@williampersell,谢谢你的提示。我没有使用显式
8
,因为我没有在这里附加任何真正的代码。这是一个有条理的问题,但再次感谢。我实际上阅读了完全相同的文档文件,我只是不知道ascii和二进制文件是否都需要。@Quaker编码与二进制编码对
fseek
没有区别:它提供了非常低级的定位功能,无论
文件*
以何种模式打开。
First Byte position  ==>  fseek(fp,0,SEEK_SET);
Second Byte position ==>  fseek(fp,1,SEEK_SET);
Third Byte position  ==>  fseek(fp,2,SEEK_SET);