lua 中的按位运算符创建字符串
bitwise operators in lua to create string
LUA 为 Wireshark 创建协议解析器的新用户。
参考Lua - Bitwise Logical Operations,
我需要 Lua 中的一个函数来根据转换后的十六进制值创建字符串:
local function HexToCircuitID(val)
-- input: 0x9D81
-- output: "630.1.01"
local e = ((val >> 4) & 0x3) + 1
local f = val & 0xF
local g = val >> 6
return string.format("%d.%d.%02d",e,f,g)
end
第一行右移运算符的 "unexpected symbol near '>' " 解释器有问题。
此外,我不确定字符串格式函数是否会像在 C 中一样运行(Lua 的新功能)。此函数是创建一个显示为:
的 ProtoField
CircuitId: 630.1.01
其中字段的实际值为 0x9D81。
您可以使用 bit.rshift(x, n)
右移,bit.band(x1[,x2...])
右移 &。
函数变为:
local function HexToCircuitID(val)
-- input: 0x9D81
-- output: "630.1.01"
local e = bit.band(bit.rshift(val, 4), 0x3) + 1
local f = bit.band(val, 0xF)
local g = bit.rshift(val, 6)
--return string.format("%d.%d.%02d",e,f,g)
return string.format("%d.%d.%02d",g,f,e)
end
为了获得正确的顺序,我必须将 e,f,g 更改为 g,f,e。
这将适用于最新版本的 Wireshark,它使用 Lua 5.2。正如 Nifim 提到的,您必须使用位库而不是按位运算符,因为它们是在 Lua 5.3.
中引入的
LUA 为 Wireshark 创建协议解析器的新用户。
参考Lua - Bitwise Logical Operations,
我需要 Lua 中的一个函数来根据转换后的十六进制值创建字符串:
local function HexToCircuitID(val)
-- input: 0x9D81
-- output: "630.1.01"
local e = ((val >> 4) & 0x3) + 1
local f = val & 0xF
local g = val >> 6
return string.format("%d.%d.%02d",e,f,g)
end
第一行右移运算符的 "unexpected symbol near '>' " 解释器有问题。
此外,我不确定字符串格式函数是否会像在 C 中一样运行(Lua 的新功能)。此函数是创建一个显示为:
的 ProtoFieldCircuitId: 630.1.01
其中字段的实际值为 0x9D81。
您可以使用 bit.rshift(x, n)
右移,bit.band(x1[,x2...])
右移 &。
函数变为:
local function HexToCircuitID(val)
-- input: 0x9D81
-- output: "630.1.01"
local e = bit.band(bit.rshift(val, 4), 0x3) + 1
local f = bit.band(val, 0xF)
local g = bit.rshift(val, 6)
--return string.format("%d.%d.%02d",e,f,g)
return string.format("%d.%d.%02d",g,f,e)
end
为了获得正确的顺序,我必须将 e,f,g 更改为 g,f,e。
这将适用于最新版本的 Wireshark,它使用 Lua 5.2。正如 Nifim 提到的,您必须使用位库而不是按位运算符,因为它们是在 Lua 5.3.
中引入的