簡體   English   中英

在lua中將字節序列轉換為ASCII字符串

[英]Conversion of sequence of bytes to ASCII string in lua

我正在嘗試為Wireshark編寫自定義解剖器,它將字節/十六進制輸出更改為ASCII字符串。

我能夠寫出這個解剖器的主體並且它有效。 我唯一的問題是將此數據轉換為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 )

我不確定這是否有效,但至少它有效;)

Lua中沒有split這樣的功能(咨詢參考手冊是一個好的開始)。 你應該使用wiki上描述的string.gmatch函數:

data = "24:50:48"
for i in string.gmatch(data, "[^:]*") do
  print(i)
end

實例

此外,您正在搜索string.char函數以將字節轉換為ascii char。

您需要在緩沖區中標記您感興趣的字節范圍並將其轉換為您想要的類型:

data:range(offset, length):string()
-- or just call it, which works the same thanks to __call metamethod
data(offset, length):string()

有關將緩沖區范圍數據轉換為不同類型的可用方法的完整列表,請參閱https://wiki.wireshark.org/LuaAPI/Tvb中的 TvbRange說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM