function hex(s, base, r, n, i, k, c) { base = 16; if(s ~ /^0[xX][0-9a-fA-f]+/) s = substr(str, 3); n = length(s) r = 0 for (i = 1; i <= n; i++) { c = tolower(substr(s, i, 1)) k = index("0123456789abcdef", c) - 1; r = r * base + k } return r } function mystrtonum(str0, neg, base, str, r, n, i, k, c) { base = 0; neg = 0; str = str0; if(str ~ /^\+/) str = substr(str, 2) if(str ~ /^-/){ str = substr(str, 2) neg = 1 } if(str ~ /^0[0-7]*$/) base = 8 if(str ~ /^0[xX][0-9a-fA-f]+/){ str = substr(str, 3); base = 16; } if(base != 0){ n = length(str) r = 0 for (i = 1; i <= n; i++) { c = tolower(substr(str, i, 1)) k = index("0123456789abcdef", c) - 1; r = r * base + k } }else if(str ~ /^[0-9]*([.][0-9]*)?([Ee][-+]?[0-9]+)?$/) r = str0 + 0 else r = "NaN" return r } BEGIN{ a[1] = "25" a[2] = ".31" a[3] = "0123" a[4] = "0xdeadBEEF" a[5] = "123.45" a[6] = "1.e3" a[7] = "1.32" a[7] = "1.32E2" for (i = 1; i in a; i++) print a[i], strtonum(a[i]), mystrtonum(a[i]) }