String 如何在lua字符串文字中嵌入十六进制值(即.\x等效值)
在各种语言中,可以使用\x转义序列将十六进制值嵌入字符串文字:String 如何在lua字符串文字中嵌入十六进制值(即.\x等效值),string,lua,escaping,hex,string-literals,String,Lua,Escaping,Hex,String Literals,在各种语言中,可以使用\x转义序列将十六进制值嵌入字符串文字: “你好\x77\x6f\x72\x6c\x64” 如何在Lua5.1中执行相同的操作?(来自) 您可以使用\ddd转义序列在Lua中的字符串文本中嵌入十进制值,其中ddd是最多三位十进制数字的序列。例如: “\72ell\111”与“hello”相同,因为Lua3.1,您可以在字符串自由符中使用十进制转义 从Lua5.2开始,可以在字符串文本中使用十六进制转义 在Lua 5.1中,可以将十六进制转义转换为后验概率: s=[[hell
“你好\x77\x6f\x72\x6c\x64”
如何在Lua5.1中执行相同的操作?(来自)
您可以使用\ddd
转义序列在Lua中的字符串文本中嵌入十进制值,其中ddd
是最多三位十进制数字的序列。例如:
“\72ell\111”
与“hello”
相同,因为Lua3.1,您可以在字符串自由符中使用十进制转义
从Lua5.2开始,可以在字符串文本中使用十六进制转义
在Lua 5.1中,可以将十六进制转义转换为后验概率:
s=[[hello \x77\x6f\x72\x6c\x64]]
s=s:gsub("\\x(%x%x)",function (x) return string.char(tonumber(x,16)) end)
print(s)
注意长字符串的使用,它不解释转义序列。如果在原始代码中使用短字符串(引号),则
\x
将被静默转换为x
,因为Lua 5.1不理解\x
。Lua 5.2及更高版本抱怨它不理解转义序列。如果您在混合控制字符和常规字符的字符串上使用十进制值,我建议您始终使用3个位置(而不是最多3个)或转换所有字符,否则您可能会将“\n3”转换为“\103”,这与“\0103”不同,当我在文档中看到“最多三个”语句时,我感到很惊讶,觉得这只不过是个麻烦!我喜欢这个答案,因为你解释了如何完全按照我的要求去做,即使语言不支持默认设置。我想如果你能引用现有的在字符串文本中嵌入十进制值的能力(即,结合我的答案和你的答案),那么我会接受这个答案。你知道为什么这在5.1中对我有效吗print(_VERSION,'\xff')>>>Lua 5.1\255
@NasBanov,也许您正在运行Lua.org上的LuaJIT而不是Lua。@lhf您找到了!我在ZeroBrane Studio控制台中进行了尝试,但没有调试时,它确实是LuaJIT(具有jit
table)。但是,当我在断点处调试时,没有更多的JIT,输出是“Lua 5.1”“xff”
-完美匹配!