C ++ fseek:第一个字节位于0或1位置?

时间:2013-03-31 15:21:10

标签: c++ fseek

我想从具有特定偏移量的文件中读取字节。

我必须在VB6和C ++中做同样的事情。

例如:

FILE *file =fopen(szFileName,"rb");
fseek( file, iFirstByteToRead, SEEK_SET);
fread(nBytes,sizeof(unsigned char), iLenCompressedBytes, file);

(是的,我知道nBytes没有声明为字节,但无论如何我将其命名为nBytes以保持我的VB6命名。)

在VB6中我必须使用

Get #iFile, iFirstByteToRead, nBytes

在VB6中,第一个字节(使用“Get”时)位于第1位。 这意味着我不得不说

Get #iFile, 1, nBytes

...从文件的最开头读取字节。

我想知道fseek是否也是基于1的,或者它是否基于0。

我是否必须将iFirstByteToRead减少-1以获得相同的结果?

我的问题是纯粹的理论性质,请不要说我的编码很糟糕......

谢谢。

2 个答案:

答案 0 :(得分:5)

简而言之:fseek的{​​{1}}偏移量从零开始(例如SEEK_SET会将流的位置设置为开头)。

答案 1 :(得分:2)

第一个字节位于文件中的偏移0处。