Ir para conteúdo

Decimal/Hexadecimal


Oneshot

Posts Recomendados

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)
end

 

Exemplos 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:

 


MAGIC_EFFECT_EXTRA1 = 0x2D
MAGIC_EFFECT_EXTRA2 = 0x2E
MAGIC_EFFECT_EXTRA3 = 0x2F
MAGIC_EFFECT_EXTRA4 = 0x30
MAGIC_EFFECT_EXTRA5 = 0x31
MAGIC_EFFECT_EXTRA6 = 0x32
MAGIC_EFFECT_EXTRA7 = 0x33
MAGIC_EFFECT_EXTRA8 = 0x34
MAGIC_EFFECT_EXTRA9 = 0x35
MAGIC_EFFECT_EXTRA10 = 0x36
(...)

 

Prático, né? Hehe icon_lol.gif

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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 por MaXwEllDeN
Link para o comentário
Compartilhar em outros sites

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:

 

okffU.png

 

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 por Oneshot
Link para o comentário
Compartilhar em outros sites

Pô Garou(Acho estranho chamar de Oneshot D:), 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 '-'.

Link para o comentário
Compartilhar em outros sites

  • 3 months later...

sauhsausahusahsauahsusahusahsauhsausahuashsauhsausahsau

niguem reparou no

math.hex = function(dec)

dec = tonumber(dec)

return string.format("%X", number)

end

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...