Как напечатать lld в Lua 5.3
string.format (formatstring, ···)
Возвращает отформатированную версию своего переменного числа аргументов в соответствии с описанием, приведенным в первом аргументе (который должен быть строкой). Строка формата соответствует тем же правилам, что и функция ISO C sprintf. Разница лишь в том, что опции / модификаторы *, h, L, l, n, and p
не поддерживаются и что есть дополнительная опция, q
,
Lua 5.3 не поддерживает lld
как я могу распечатать lld
в Lua 5.3?
1 ответ
Краткий ответ: используйте %d
,
В С sprintf
, %lld
используется для форматирования long long
тип, который является целочисленным типом не менее 64 бит.
В Lua 5.3 тип number
имеет два внутренних представления, целое и число с плавающей точкой. Целочисленное представление является 64-битным в стандартном Lua. Ты можешь использовать %d
распечатать его независимо от его внутреннего представления:
print(string.format("%d", 2^62))
Выход: 4611686018427387904
В исходном файле Lua luaconf.h
Видно, что Луа преобразует %d
в подходящий формат:
#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d"
а также LUA_INTEGER_FRMLEN
определяется как ""
, "l"
или же "ll"
если используется другое внутреннее представление для целого числа:
#if defined(LLONG_MAX) /* { */
/* use ISO C99 stuff */
#define LUA_INTEGER long long
#define LUA_INTEGER_FRMLEN "ll"
//...