所有入参传入数据都是string类型,这样更方便整体处理。
进制数枚举常量可以增加更多的进制类型,进制转换中可相应增加处理函数。
import (
"errors"
"strconv"
)
// BaseEnumType 进制数枚举常量
type BaseEnumType string
const (
BASE_DEC BaseEnumType = "DEC"
BASE_HEX BaseEnumType = "HEX"
)
// BaseTransAndSplit 进制转换并按数位拆分
func BaseTransAndSplit(dataStr string, oldBaseType BaseEnumType, newBaseType BaseEnumType, start int, end int) (string, error) {
transData, err := BaseTransition(dataStr, oldBaseType, newBaseType)
splitDataStr, err := DigitalSplit(transData, start, end)
return splitDataStr, err
}
// BaseTransition 进制转换
func BaseTransition(dataStr string, oldBaseType BaseEnumType, newBaseType BaseEnumType) (string, error) {
if oldBaseType == BASE_DEC {
if newBaseType == BASE_HEX {
transData, err := BaseDecToHex(dataStr)
return transData, err
}
}
if oldBaseType == BASE_HEX {
if newBaseType == BASE_DEC {
transData, err := BaseHexToDec(dataStr)
return transData, err
}
}
return dataStr, errors.New("conversion type does not exist")
}
// BaseDecToHex 10进制64位整形数字转换为16进制
func BaseDecToHex(dataStr string) (string, error) {
base10, err := strconv.ParseInt(dataStr, 10, 64)
transDataStr := strconv.FormatInt(base10, 16)
return transDataStr, err
}
// BaseHexToDec 16进制数字转换为10进制64位整形
func BaseHexToDec(dataStr string) (string, error) {
base10, err := strconv.ParseInt(dataStr, 16, 64)
transDataStr := strconv.FormatInt(base10, 10)
return transDataStr, err
}
// DigitalSplit 位数拆分,取start-end位数的数字,第一位从0开始,不包括end
func DigitalSplit(dataStr string, start int, end int) (string, error) {
splitDataStr := dataStr[start:end]
return splitDataStr, nil
}