Я пытаюсь написать специальный диссектор для Wireshark, который изменит результат байта/шестнадцатеричного на строку ASCII.Преобразование последовательности байтов в строку ASCII в lua
Я смог написать тело этого диссектора, и он работает. Моя единственная проблема заключается в преобразовании этих данных в строку ASCII.
Wireshark объявляет эти данные как последовательность байтов. Для Lua тип данных: userdata
(проверено с использованием type(data)
). Если я просто преобразую его в строку, используя tostring(data)
, мой диссектор возвращает 24:50:48
, что является точным шестнадцатеричным представлением байтов в массиве.
Есть ли способ напрямую преобразовать эту последовательность байтов в ascii, или вы можете помочь мне преобразовать эту колонку в разделительную строку в строку ascii? Я совершенно новичок в Lua. Я пытался что-то вроде split(tostring(data),":")
но это возвращает Lua Error: attempt to call global 'split' (a nil value)
Используя ответ Jakuje, я был в состоянии создать что-то вроде этого:
function isempty(s)
return s == nil or s == ''
end
data = "24:50:48:49:4A"
s = ""
for i in string.gmatch(data, "[^:]*") do
if not isempty(i) then
print(string.char(tonumber(i,16)))
s = s .. string.char(tonumber(i,16))
end
end
print(s)
Я не уверен, если это эффективно, но, по крайней мере, его работ;)
Я видел, как кто-то использовал split так же, поэтому я тоже попытался. Позже я обнаружил, что в Lua нет раскола :(Я постараюсь идти своим путем. Сначала я должен пропустить пустые записи string.gmatch. –
это сработало, спасибо;) –
Любая причина для downvote , храбрый рейнджер? – Jakuje