如何在Lua 5.3中打印lld

string.format (格式化字符串, ···)

返回根据其第一个参数(必须是字符串)中指定的描述,格式化其变量数量不定的参数的版本。格式化字符串遵循与 ISO C 函数 sprintf 相同的规则。唯一的区别是不支持选项/修饰符 *, h, L, l, n 和 p,并且有一个额外的选项 q

Lua 5.3 不支持 lld,该如何在 Lua 5.3 中打印 lld

点赞
用户1009479
用户1009479

简短回答:使用%d


在 C 的 sprintf 中,%lld 用于格式化 long long 类型,这是一个至少有 64 位的整数类型。

在 Lua 5.3 中,类型 number 有两种内部表示,整数和浮点数。在标准的 Lua 中,整数表示为 64 位。无论其内部表示如何,您都可以使用 %d 将其打印出来:

print(string.format("%d", 2^62))

输出:4611686018427387904


在 Lua 源文件 luaconf.h 中,您可以看到 Lua 将 %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"
//...
2015-03-14 04:29:32