2014-02-17 3 views
1

난과 같이 몇 가지 제약이 값 :.

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 

및 설명서가 '플래그 속성이있는 피어에 상태를 알려줍니다 알려줍니다 그것은의 조합으로 설정 '위의 열거 그래서 기본적으로 내가 DLL을 호출하며, 플래그 값을 나타내는 진수와 구조에 몇 가지 예를 채우고 :

2086227 
170 
2098227 
106 

어떻게 소수점에서 내가 플래그를 결정합니까를?

답변

4

플래그가 설정되었는지 확인하려면 bitwise AND 조작 (루아 5.2에서 bit32.band())을 사용해야합니다. 예 :

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 
+4

Lua 5.1 또는 LuaJIT에서는 bit32를 사용할 수 없지만 대신 luabitop을 사용할 수 있습니다. LuaJIT는 기본적으로 5.1 용으로 설치해야합니다. – catwell

+1

Lua 5.1 (https://raw.github.com/hishamhm/lua-compat-5.2/bitlib-5.2.2/lbitlib.c)에 'bit32'의 백 포트가 존재합니다. LuaRocks와 LuaDist에 존재합니다. 그리고 LuaJIT에는 자체 비트 라이브러리가 있습니다. – moteus