【发布时间】:2016-03-05 15:25:25
【问题描述】:
我有一个字符串,通过使用string.format("%02X", char),我收到了以下内容:
74657874000000EDD37001000300
最后,我希望该字符串如下所示:
t e x t NUL NUL NUL í Ó p SOH NUL ETX NUL(空格只是为了说明示例中所需的字符)。
我尝试使用\x..(hex#)、string.char(0x..(hex#))(其中(hex#) 是我想要的字符的字母数字表示)但我仍然无法获得我正在寻找的结果。在阅读了有关此主题的另一个线程:what is the way to represent a unichar in lua 和答案中提供的链接后,我并没有完全理解在我的最终代码中我需要做什么才能使其正常工作。
我正在寻求一些帮助,以更好地理解一种方法,以帮助我实现下面提供的预期结果。
预计到达时间:
好吧,我以为我已经用以下代码修复了它:
function hexToAscii(input)
local convString = ""
for char in input:gmatch("(..)") do
convString = convString..(string.char("0x"..char))
end
return convString
end
它似乎有效,但没有考虑127以上的字符。菜鸟错误。现在我不确定如何让最多 256 个附加字符显示它们的 ASCII 值。
我做了以下检查,因为我无法在文件中真正“看到”它们。
function asciiSub(input)
input = input:gsub(string.char(0x00), "<NUL>") -- suggested by a coworker
print(input)
end
我做了几个gsub 字符串来替换其他字符,我的文件返回替换字符串。但是当我在扩展的 ASCII 表中遇到字符时,它就被遗忘了。
谁能帮助我了解解决此问题的方法或新方法?正如我之前所说,我阅读了有关此问题的其他主题,但仍然对解决此问题的最佳方法感到困惑。
【问题讨论】:
-
最多 256 个附加字符 → 比 Unicode 更多。
%X是将数字打印为十六进制的格式。确实,您的字符串中的字节似乎被一个一个地打印为十六进制数字,例如 t →74 -
@roeland 你是对的,因为我的代码将打印出最多 127 个 ASCII 字符。但除此之外,它让我没有任何表示。例如,如果我想要十进制的 234 (或 0xEA ),我没有收到我希望收到的“欧米茄”。相反,它只是空的。
-
您还必须确保您的输出终端界面(例如字体)可以处理您希望显示的字形。
-
不清楚您要做什么或这与 Unicode 有什么关系。您似乎有一个十六进制数字的字符串,并且您希望将每 2 个十六进制数字转换为一个字节。这不是 Unicode 感知转换。那么 Unicode 适合在哪里呢?
-
没有一个“扩展ASCII表”,除非这个词很漂亮。
标签: lua hex type-conversion ascii