Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Função: tonumber
  2. Função: tostring
  3. Conversão bool <-> string
  4. number -> string binária
  5. array char <-> string
  6. hexadecimal

Nesta parte do tutorial Lua vamos aprender a converter dados numéricos entre os tipos de dados string e number fazendo uso das funções nativas tonumber e tostring.

A conversão de valor numérico/binário ou booleano contidos em string é feita utilizando a função tonumber que recebe uma string contendo um valor numérico e também a base numérica para conversão.

Sintaxe
tonumber(valor_string, base_numerica)
Onde
base_numerica: 
2 binário
16 hexadecimal
10 decimal
Retorno
Number contendo valor convertido
nil se não for possível converter valor
Exemplo 1
print(tonumber("1.99")) --float
print(tonumber("0xFF"))  
print(tonumber("FF",16)) --hexa
print(tonumber("1")) --int
print(tonumber("10101010",2)) --AAh
Saída
1.99
255
255
1
170

Para a conversão de dado numérico e/ou booleano para string, Lua fornece a função tostring que recebe uma valor numérico como argumento para a conversão.

Sintaxe
tostring(valor_string)
Exemplo 2
print(tostring(1.99)) --float
print(tostring(0xFF)) --hexa
print(tostring(1)) --int decimal
print(tostring(false))
print(tostring(true))
Saída
1.99
255
1
false
true

Lua não fornece uma função nativa para conversão do tipo booleano para string e vice-versa. Essa conversão pode ser feita fazendo uso do comando if-else ou simulando o comando if ternário.

Exemplo 3
local flag = true

res = flag == true and "true" or "false"
print(res, type(res))

flag = "false"
res = (string.lower(flag)) == "true" and true or false
print(res, type(res))
Saída
true	string
false	boolean

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
  1. 25/05/2026 - revisão 1 - Adição: number -> string binária
  2. 11/12/2025 - versão inicial: Adição de tonumber, tostring e bool <-> string