eita da onde tu tira essas funcionalidades das funçoes .lua nativas? kkk simples e pode ajudar algumas pessoas '--'
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- Decimal/Hexadecimal
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

Preguiça, a mãe do progresso.. ASOIJDASJDOASIJDASPDOK
Ficou bem legal, lembro que o mock tinha feito algo assim uma vez, não lembro quem era. Mas ficou bem legal mesmo
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

Bem prático xD, eu já tinha visto uma função que convertia de decimal pra hexadecimal só que era uma "gambiarra" comparando a tua que usa pattern
. Obrigado por postar ela xD amplia meu conhecimento de patters que é muito pouco. Olha a que eu tinha aqui:
function DEC_HEX(IN) local B,K,OUT,I,D=16,"0123456789ABCDEF","",0 while IN>0 do I=I+1 IN,D=math.floor(IN/B),math.mod(IN,B)+1 OUT=string.sub(K,D,D)..OUT end return OUT end
A algum tempo eu fiz umas pra manipular binários, você pode me ajudar a simplificar elas e deixar menos pogadas?
math.bin = function(dec) local bin = "" while (true) do bin = bin .. dec % 2 if (dec == 1) then bin = bin:reverse() break end dec = math.floor(dec / 2) end return bin end math.bdec = function (bin) local bin, decimal = bin:reverse(), 0 for a = 0, #bin-1 do decimal = ((tonumber(bin:sub(a+1, a+1)) * 2^a)) + decimal end return decimal end
Editado Janeiro 4 por MaXwEllDeN
A função que converte decimal para binário, eu não entendi porque você usou while true do, quando poderia ter feito isso abaixo e ter tirado aquele break.
while dec > 1 do
Mesmo assim eu teria feito diferente.
Lembro do meu bom e velho professor Márcio Oscar do curso de eletrônica e a manha que ele me ensinou para converter hexadecimal para binário:

Ou seja, para uma função decimal-binário, podemos criar uma tabela com os binários dos hexadecimais e fazer algo mais ou menos assim.
math.bin = function(dec)
local hex = {["0"] = 0000, ["1"] = 0001, ["2"] = 0010, ["3"] = 0011, ["4"] = 0100, ["5"] = 0101, ["6"] = 0110, ["7"] = 0111, ["8"] = 1000, ["9"] = 1001,
["A"] = 1010, ["B"] = 1011, ["C"] = 1100, ["D"] = 1101, ["E"] = 1110, ["F"] = 1111}
dec = string.format("%X", dec)
local ret = ""
for n = #dec, 1, -1 do
local bin = hex[string.sub(dec, n, n)]
ret = bin .. ret
end
return ret
end
Apesar que ficou mais pogada que a sua haha.
Já a função binário-decimal é mais especial, uma vez que a própria linguagem Lua nos fornece um grande artificio. Veja o que o nosso grande site, lua.org, diz sobre a função tonumber
tonumber(e[, base])
Sabendo que binário é base 2. Temos então:
math.bdec = function(bin) return tonumber(bin, 2) end
Abraços.
Editado Janeiro 4 por Oneshot
info
Grupo: Barão
Registrado: 18/10/10
Posts: 246
Reputação: +89
Char no Tibia: Elite Pamcadaum

Pô Garou(Acho estranho chamar de Oneshot
), obrigado, nunca que eu ia pensar em fazer desse modo xD.
@Off
Que bacana você fez curso de eletrônica xD. Tô cursando Eletrotécnica integrado com o ensino médio, mas ainda tô no primeiro ano '-'.






info
Grupo: Marquês
Registrado: 05/07/09
Posts: 1.3k
Reputação: +732
Estas são duas funções novas para a biblioteca math, que acabei desenvolvendo por causa da minha extrema preguiça na hora de adicionar novos efeitos nas sources.
math.hex = function(dec) dec = tonumber(dec) return string.format("%X", number) end math.dec = function(hex) return tonumber(hex, 16) endExemplos de Uso:
local file = io.open("effects.txt", "w+") for i = 45, 220 do file:write("MAGIC_EFFECT_EXTRA".. (i - 44) .." = 0x".. math.hex(i) .."\n") end file:close()No caso o exemplo acima iria gerar essa coisa aqui:
Prático, né? Hehe
Editado Janeiro 4 por Oneshot