Я новичок в 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"
Потому что вы используете% x. Это говорит 40 как в 0x40, шестнадцатеричное число. Вам нужно% i или% d, чтобы получить десятичное число.
fpos_t не является (обязательно) арифметическим типом и не может использоваться с printf.Реализация может даже сохранить его как структуру, содержащую зашифрованную позицию, если она того пожелает.Используйте ftell (или ftello, если доступно), чтобы получить смещение файла в значимой числовой форме.fgetpos в значительной степени бесполезен.
fpos_t
printf
ftell
ftello
fgetpos
все, что вы печатаете, находится в шестнадцатеричном формате. 40 в десятичном виде - 64. Do you mean the file size is 0x64 or 0x40
Do you mean the file size is 0x64 or 0x40
4 * 16 - 64