Правильная строка формата для длинных без знака: %lu
.
Список спецификаторов формата можно найти здесь .
Аналогичный вопрос был задан здесь .
%lx
используется для получения шестнадцатеричного представления числа.Поэтому не имеет значения, если он не подписан или подписан, поскольку вместо отрицательного знака используется дополнение 2 *.
Если вы хотите напечатать обычное длинное число, вы можете использовать либо %ld
, либо %li
, как указанопо первой ссылке, которую я отправил.
Пример:
unsigned long a = (unsigned long)(-25);
char buff[100];
sprintf(buff, "%lu %lx %ld", a, a, a);
printf("%s", buff);
Вывод:
4294967271 ffffffe7 -25