Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在lua字符串文字中嵌入十六进制值(即.\x等效值)_String_Lua_Escaping_Hex_String Literals - Fatal编程技术网

String 如何在lua字符串文字中嵌入十六进制值(即.\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

在各种语言中,可以使用\x转义序列将十六进制值嵌入字符串文字:

“你好\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”
-完美匹配!