Convert decimal to decimal in Lua

The Lua tone function is good, but can only convert unsigned integers if they are not base 10. I have a situation where I have numbers like 01.4C that I would like to convert to decimal numbers.

I have a muddy solution:

 function split(str, pat) local t = {} local fpat = "(.-)" .. pat local last_end = 1 local s, e, cap = str:find(fpat, 1) while s do if s ~= 1 or cap ~= "" then table.insert(t,cap) end last_end = e+1 s, e, cap = str:find(fpat, last_end) end if last_end <= #str then cap = str:sub(last_end) table.insert(t, cap) end return t end -- taken from http://lua-users.org/wiki/SplitJoin function hex2dec(hexnum) local parts = split(hexnum, "[\.]") local sigpart = parts[1] local decpart = parts[2] sigpart = tonumber(sigpart, 16) decpart = tonumber(decpart, 16) / 256 return sigpart + decpart end print(hex2dec("01.4C")) -- output: 1.296875 

I would be interested to get a better solution for this, if any.

+4
source share
3 answers

If your Lua is compiled using the C99 compiler (or, possibly, an earlier gcc), then ...

 ~ e$ lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > return tonumber"0x01.4C" 1.296875 
+7
source

Here is a simpler solution:

 function hex2dec(hexnum) local a,b=string.match(hexnum,"(.*)%.(.*)$") local n=#b a=tonumber(a,16) b=tonumber(b,16) return a+b/(16^n) end print(hex2dec("01.4C")) -- output: 1.296875 
+9
source

Move the hexadecimal point two places to the right, convert to decimal, and then divide by 256.

 014C ==> 332 / 256 = 1.296875 
+4
source

Source: https://habr.com/ru/post/1307591/


All Articles