Lua 将十进制数转换为标志值

Lua 将十进制数转换为标志值,lua,libtorrent,Lua,Libtorrent,我有一些限制,比如: interesting = 0x1 choked = 0x2 remote_interested = 0x4 remote_choked = 0x8 supports_extensions = 0x10 local_connection = 0x20 handshake = 0x40 connecting = 0x80 queued = 0x100 on_parole = 0x200 seed = 0x400 optimistic_unchoke = 0x800 rc4_e

我有一些限制,比如:

interesting = 0x1
choked = 0x2
remote_interested = 0x4
remote_choked = 0x8
supports_extensions = 0x10
local_connection = 0x20
handshake = 0x40
connecting = 0x80
queued = 0x100
on_parole = 0x200
seed = 0x400
optimistic_unchoke = 0x800
rc4_encrypted = 0x100000
plaintext_encrypted = 0x200000
文档告诉我‘flags属性告诉您对等方处于哪个状态。它被设置为上述枚举的任意组合,因此基本上我调用dll,它用代表标志值的十进制数字填充结构,以下是一些示例:

2086227
170
2098227
106

如何从小数点确定标志?

要确定设置了哪些标志,需要使用该操作(在Lua 5.2中)。例如:

function hasFlags(int, ...)
    local all = bit32.bor(...)
    return bit32.band(int, all) == all
end

if hasFlags(2086227, interesting, local_connection) then
    -- do something that has interesting and local_connection
end

为了确定设置了哪些标志,您需要使用该操作(在LUA5.2中)。例如:

function hasFlags(int, ...)
    local all = bit32.bor(...)
    return bit32.band(int, all) == all
end

if hasFlags(2086227, interesting, local_connection) then
    -- do something that has interesting and local_connection
end

在Lua5.1或LuaJIT中,bit32不可用,但可以使用luabitop。它是LuaJIT自带的,您需要为5.1安装它。Lua5.1()有
bit32的后端口。它存在于Luarock和LuaDist。LuaJIT有自己的位库在Lua5.1或LuaJIT中,位32不可用,但可以使用luabitop。它是LuaJIT自带的,您需要为5.1安装它。Lua5.1()有
bit32的后端口。它存在于Luarock和LuaDist。LuaJIT有自己的比特库