54 lines
1023 B
Go
54 lines
1023 B
Go
package hexadecimal
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
)
|
|
|
|
func ParseHex(in string) (int64, error) {
|
|
return convertNumStringBase(in, int64(16))
|
|
}
|
|
|
|
func HandleErrors(in []string) []string {
|
|
var ret []string
|
|
for i := range in {
|
|
errStr := "none"
|
|
_, err := convertNumStringBase(in[i], 16)
|
|
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, base int64) (int64, error) {
|
|
if in == "" {
|
|
return 0, errors.New("syntax")
|
|
}
|
|
in = strings.ToLower(in)
|
|
var a, n int64
|
|
for i := range in {
|
|
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
|
|
|
|
if n < 0 {
|
|
return 0, errors.New("range")
|
|
}
|
|
}
|
|
return n, nil
|
|
}
|