我是 C 新手,我有这个代码:
f = fopen( argv[1], "rb" );
fseek( f, 64, SEEK_SET );
fpos_t pos;
fgetpos (f, &pos);
printf("%x", pos);
然而,这返回 40,即使它应该返回 64。我做错了什么?
您正在以十六进制格式输出 64 "%x"
,. 既然64=0x40,谜底就解开了!
因为您使用的是 %x。它说的是 40,就像 0x40 一样,十六进制数。您需要 %i 或 %d 来获得十进制数。
4 * 16 是 64
无论您打印什么都是十六进制格式。十进制的 40 是 64。Do you mean the file size is 0x64 or 0x40
fpos_t
不是(必然)算术类型,不能与 . 一起使用printf
。如果愿意,实现甚至可以将其存储为包含加密位置的结构。使用ftell
(或ftello
如果可用)以有意义的数字形式获取文件偏移量。fgetpos
基本上没用。