lua-users home
lua-l archive

converting arbitrary long decimals to hex?

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi,
I'm trying to convert arbitrary long decimals (encoded as a string of
digits) to it's hex representation (i.e. a string of hexadecimal
digits). For short decimals, format('%x') is the way to go. That
looses out however for e.g. '5766297887677882160' because we loose
precision when it's internally converted to a (floating point) number:
it returns '50060160b0202000' instead of '50060160b0201f30'.
So please help me out. Here is what I came up with, is that correct or
is there a better/faster way to do it (I know that BigNum can do it, but
this is not pure Lua).
function tohex(decimal)
 if type(decimal) == 'number' or #decimal < 15 then
 return ('%x'):format(decimal)
 end
 local hex = ''
 while decimal do
 local div = ''
 local mod = 0
 for i = 1, #decimal do
mod = mod * 10 + tonumber(decimal:sub(i, i))
local f = math.floor(mod / 16)
mod = mod - f * 16
div = div .. f 
 end
 hex = ('%x'):format(mod) .. hex
 decimal = div:match('0+(.+)')
 end
 return hex
end
</nk>

AltStyle によって変換されたページ (->オリジナル) /