Syncing Up
This commit is contained in:
@@ -2,8 +2,6 @@ package hexadecimal
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@@ -14,43 +12,42 @@ func ParseHex(in string) (int64, error) {
|
||||
func HandleErrors(in []string) []string {
|
||||
var ret []string
|
||||
for i := range in {
|
||||
errStr := "none"
|
||||
_, err := convertNumStringBase(in[i], 16)
|
||||
ret = append(ret, err.Error())
|
||||
if err != nil {
|
||||
errStr = err.Error()
|
||||
}
|
||||
ret = append(ret, errStr)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
// convertNumStringBase takes a numeric string and the base of that string
|
||||
// and returns an int64 of the decimal representation
|
||||
func convertNumStringBase(in string, oldBase int64) (int64, error) {
|
||||
func convertNumStringBase(in string, base int64) (int64, error) {
|
||||
if in == "" {
|
||||
return 0, errors.New("syntax")
|
||||
}
|
||||
in = strings.ToLower(in)
|
||||
base := big.NewInt(oldBase)
|
||||
var sum big.Int
|
||||
var a, n int64
|
||||
for i := range in {
|
||||
var x *big.Int
|
||||
if in[i] >= '0' && in[i] <= '9' {
|
||||
x = big.NewInt(int64(in[i] - '0'))
|
||||
} else if in[i] >= 'a' && in[i] <= 'z' {
|
||||
x = big.NewInt(int64(in[i]-'a') + 10)
|
||||
}
|
||||
fmt.Println("Comparing Converted Value ", x, "<", oldBase)
|
||||
if x.Int64() > oldBase {
|
||||
n *= base
|
||||
switch {
|
||||
case in[i] >= '0' && in[i] <= '9':
|
||||
a = int64(in[i] - '0')
|
||||
case in[i] >= 'a' && in[i] <= 'f':
|
||||
a = int64(in[i]-'a') + 10
|
||||
default:
|
||||
return 0, errors.New("syntax")
|
||||
}
|
||||
if a > base {
|
||||
return 0, errors.New("syntax")
|
||||
}
|
||||
n += a
|
||||
|
||||
pow := big.NewInt(int64(len(in) - i - 1))
|
||||
|
||||
var n big.Int
|
||||
n.Exp(base, pow, nil)
|
||||
n.Mul(x, &n)
|
||||
|
||||
sum.Add(&sum, &n)
|
||||
if sum.Int64() < 0 {
|
||||
return 0, errors.New("Integer Overflow")
|
||||
if n < 0 {
|
||||
return 0, errors.New("range")
|
||||
}
|
||||
}
|
||||
return sum.Int64(), nil
|
||||
return n, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user