如何在不将 lua 字节码转换为其可读等效形式的情况下打印 lua 字节码?

如何在不将字节码转换为其可读等效形式的情况下打印字节码(例如 \122 ,相当于小写字母“z”)?

下面是我的代码:

symbols = {
        forwardslash = "\47",
        backslash = "\92",
        andsymbol = "\38",
        starthing = "\42",
        hashtag = "\35",
        atsymbol = "\64",
        dot = "\46",
        comma = "\44",
        exclamation = "\33",
        questionmark = "\63",
        speechmark = "\34",
        invertedcomma = "\39",
        percent = "\37",
        dash = "\45",
        underscore = "\95",
        bracket1 = "\40",
        bracket2 = "\41",
        squarebracket1 = "\91",
        squarebracket2 = "\93",
        squiglybracket1 = "\123",
        squiglybracket2 = "\125"
};
print(symbols.bracket1)

代码图片:https://imgur.com/Rtwdzfc

点赞
用户4567755
用户4567755

使用 string.byte

print(string.byte(symbols.bracket1)) -- 输出:40

今后,我建议您先查看 String Manipulation 和其他章节的 Lua Reference Manual。这真是一份好的文档。

"\40" 转换为 "(" 是由于 Lua 中转义序列的处理方式。请参阅 词法规范 或查看下面的批处理示例:

print("(") -- 输出:(
print("\40") -- 输出:(
print(string.char(40)) -- 输出:(

print(40) -- 输出:40
print(string.byte("(")) -- 输出:40
print(string.byte("\40")) -- 输出:40
print(string.format("%d", 40)) -- 输出:40

print("\\40") -- 输出:\40
print(string.format("\\%d", 40)) -- 输出:\40
print(string.format("\\%d", string.byte("("))) -- 输出:\40
print(string.format("\\%d", string.byte("\40"))) -- 输出:\40
2020-08-03 12:33:04
用户11740758
用户11740758

使用string.byte()string.format()结合输出反斜杠...

for k,v in pairs(symbols)
 do
  print(k..'='..string.format("\"\\%s\"",string.byte(v)))
 end

输出结果为...

hashtag="\35"
squiglybracket2="\125"
speechmark="\34"
forwardslash="\47"
squarebracket2="\93"
andsymbol="\38"
dash="\45"
squiglybracket1="\123"
exclamation="\33"
bracket2="\41"
backslash="\92"
starthing="\42"
dot="\46"
squarebracket1="\91"
atsymbol="\64"
comma="\44"
invertedcomma="\39"
bracket1="\40"
percent="\37"
underscore="\95"
questionmark="\63"
2020-08-03 15:28:49