Чтение PHP_INT_MAX или близкого значения с помощью (f | v | s) функций scanf - PullRequest
2 голосов
/ 12 марта 2012

Я использую 64-битную версию Ubuntu Linux. также 64-битный. Я пытаюсь прочитать целое число из файла с помощью fscanf. Кажется, fscanf не может сканировать целое число более 32 бит. Смотрите демонстрацию ниже.

var_dump(
    $a = PHP_INT_MAX, 
    --$a, 
    (string)$a, 
    sscanf((string)$a, "%u"), 
    PHP_INT_SIZE
);

выход

int(9223372036854775807)
int(9223372036854775806)
string(19) "9223372036854775806"
array(1) {
  [0]=>
  string(10) "4294967294"
}
int(8)

Видите, 64-битная целочисленная арифметика работает! Это просто функция sscanf, которая не работает. Может быть, мне не хватает правильного формата .
Как я могу прочитать 64-битные целые числа в PHP, используя scanf? Какой будет формат?

1 Ответ

1 голос
/ 12 марта 2012

Ответ заключается в том, что вам нужно обновить версию PHP до более современной версии.Похоже, что 5.2 имеет эту проблему , но она исправлена ​​в 5.3

Так что обновите свою версию PHP, и вы должны быть готовы ... (и этоне считая того, что сейчас 5.2 - это EOL) ...

...