次のような変数フィールドの条件をチェックするプログラムがあります
if(tostring(field) == '0') then {do something}
if(tostring(field) == '1') then {do something}
if(tostring(field) == '2') then {do something}
しかし、lua は「0」と「1」を TRUE/FALSE 値として解釈し、対応する if 条件を適切にチェックしていないと思います。条件は、field == '2' 条件に対して適切に実行されます。
どうすればこのケースを克服できますか? チェック条件「0」と「1」で機能させるにはどうすればよいですか?
前もって感謝します!
なぜwiresharkにタグを付けたのか疑問に思っている場合は、ifチェック条件がpcapファイルのフィールドをチェックしています。
参照用の私の lua コードは次のとおりです。
#!/usr/bin/lua
do
local pkts = 0
local stat = {}
local file = io.open("luawrite","w")
local function init_listener()
local tap = Listener.new("wlan")
local src_addr = Field.new("wlan.sa")
local type = Field.new("wlan.fc.type")
local sub_type = Field.new("wlan.fc.subtype")
local frame_length = Field.new("frame.len")
local data_rate = Field.new("wlan.data_rate")
function tap.reset()
pkts = 0;
end
function tap.packet(pinfo, tvb)
local client = src_addr()
local stype = sub_type()
local ty = type()
local ts = tostring(pinfo.rel_ts)
local fl = frame_length()
rate = data_rate()
if(tostring(ty) == '0') then
file:write(tostring(ts), "\t", tostring(fl), "\t", tostring(rate), "\n")
end
end
end
init_listener()
end
最後の行から7行目を参照している条件。条件をstring(ty) == '2'にすると正常に動作します。