0

パケット内のデータを int に変換しようとしていますが、うまくいきません。フィールドをサブツリーに正しく追加することはできますが、他の作業を実行するために整数としてデータにアクセスしたいと考えています。

下記の変数lenをintとして使えるようにしたいのですが、「tonumber」メソッドを使おうとすると「Nil」が返ってきます。「tostring」を使用して文字列に変換できますが、to number メソッドではどこにも行きません。

次のコードを使用して整数に変換する例をいくつか見ました。

    local len = buf(0,4):uint32()

しかし、自分のマシンで実行すると、次のエラーが発生します。

     Lua error: attempt to call method "uint32" (a nil value)

コメントされている場所を除いて、すべてを正しく実行するコードを次に示します。

{rest of code}
-- myproto dissector function function 
function (my_proto.dissector (buf, pkt, root) 

    -- create subtree for myproto 
    subtree = root:add(my_proto, buf(0)) 
    -- add protocol fields to subtree 
    subtree:add(f_messageLength, buf(0,4))

    -- This line does not work as it returns a nil value
    local len = tonumber(buf(0,4))

    -- This line produces a "bad argument #1 to 'set' (string expected, got nil) error"
    -- add message len to info column
    pkt.cols.info:set((tostring(len))))
    end
end
{rest of code}

私の質問は、ユーザーデータ型を操作できる整数に変換するにはどうすればよいですか?

4

1 に答える 1

2

bufここにはTvbRangeオブジェクトがあり、 はありませんTvbRange.uint32()。を探していTvbRange.uint()ます。このアップデートを試してください:

function (my_proto.dissector (buf, pkt, root) 
    subtree = root:add(my_proto, buf(0)) 
    subtree:add(f_messageLength, buf(0,4))

    local len = buf(0,4):uint()
    pkt.cols.info:set(len)
end
于 2012-05-12T02:13:36.140 に答える