Lua não possui uma função nativa para conversão de um number para string binário. Sendo assim,
utilizamos os operadores(Lua 5.3+) (>>) ou (<<) para o deslocamento de bits para essa conversão
que é feita via comando de loop.
Exemplo 4: 8-bits
idx = 0
num = 0xaa
msk = 0x80
bin = {}
for idx = 0 , 7, 1 do
table.insert(bin, (num&msk)>>(7-idx))
msk = msk >> 1
end
--table ->string
print(table.concat(bin,'-'))
print(table.concat(bin))
Saída
1-0-1-0-1-0-1-0
10101010
Essa mesma conversão pode ser feita utilizando a biblioteca nativa bit32(Lua 5.2+) substituindo
o operador (>>) pela função lshift como mostrado no exemplo modificado abaixo:
Exemplo 5: 8-bits
idx = 0
num = 0xaa
msk = 0x80
bin = {}
for idx = 0 , 7, 1 do
table.insert(bin, bit32.rshift(num&msk,7-idx)) --bit32 rshift
msk = bit32.rshift(msk,1) --bit32 rshift
end
--table ->string
print(table.concat(bin,'-'))
print(table.concat(bin))
Saída
1-0-1-0-1-0-1-0
10101010