0

我是 C 新手,我有这个代码:

f = fopen( argv[1], "rb" );
fseek( f, 64, SEEK_SET );
fpos_t pos;
fgetpos (f, &pos);
printf("%x", pos);

然而,这返回 40,即使它应该返回 64。我做错了什么?

4

5 回答 5

4

您正在以十六进制格式输出 64 "%x",. 既然64=0x40,谜底就解开了!

于 2011-05-05T12:17:04.590 回答
2

因为您使用的是 %x。它说的是 40,就像 0x40 一样,十六进制数。您需要 %i 或 %d 来获得十进制数。

于 2011-05-05T12:17:19.707 回答
1

4 * 16 是 64

于 2011-05-05T12:16:53.233 回答
1

无论您打印什么都是十六进制格式。十进制的 40 是 64。Do you mean the file size is 0x64 or 0x40

于 2011-05-05T12:18:02.623 回答
1

fpos_t不是(必然)算术类型,不能与 . 一起使用printf。如果愿意,实现甚至可以将其存储为包含加密位置的结构。使用ftell(或ftello如果可用)以有意义的数字形式获取文件偏移量。fgetpos基本上没用。

于 2011-05-05T12:34:22.373 回答