题解 | 进制转换
进制转换
https://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6
package main
import (
"fmt"
"strings"
)
func main() {
var s string
for {
n, _ := fmt.Scan(&s)
if n == 0 {
break
} else {
if val , ok := HexStringToTenValue(s); ok {
fmt.Printf("%d", val)
}
}
}
}
func HexStringToTenValue(s string) (int64, bool) {
s = strings.TrimSpace(s)
if len(s) >= 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X') {
s = s[2:]
}
var result int64 = 0
base := int64(16)
for i := 0; i < len(s); i++ {
char := s[i]
value, ok := HexCharToValue(char)
if !ok {
return 0, false
}
result = result*base + int64(value)
}
return result, true
}
// 单个字符转为10进制数
func HexCharToValue(c byte) (int, bool) {
switch {
case c >= '0' && c <= '9':
return int(c - '0'), true
case c >= 'a' && c <= 'f':
return int(c-'a') + 10, true
case c >= 'A' && c <= 'F':
return int(c-'A') + 10, true
default:
return 0, false
}
}