// // conv_helper.go // Copyright (C) 2022 tiglog // // Distributed under terms of the MIT license. // package helper import ( "strconv" "unsafe" ) func AnyToInt(val any, dv int) (int, error) { switch val.(type) { case int: rv, _ := val.(int) return rv, nil case int8: rv, _ := val.(int8) return int(rv), nil case int16: rv, _ := val.(int16) return int(rv), nil case int32: rv, _ := val.(int32) return int(rv), nil case int64: rv, _ := val.(int64) return int(rv), nil case string: sv, _ := val.(string) rv, err := strconv.Atoi(sv) if err != nil { return dv, err } return rv, nil case float32: rv, _ := val.(float32) return int(rv), nil case float64: rv, _ := val.(float64) return int(rv), nil } return dv, nil } func AnyToFloat(val any, dv float64) (float64, error) { switch val.(type) { case int: iv, _ := val.(int) return float64(iv), nil case int8: iv, _ := val.(int8) return float64(iv), nil case int16: iv, _ := val.(int16) return float64(iv), nil case int32: iv, _ := val.(int32) return float64(iv), nil case int64: iv, _ := val.(int64) return float64(iv), nil case string: sv, _ := val.(string) return strconv.ParseFloat(sv, 64) case float32: fv, _ := val.(float32) return float64(fv), nil case float64: fv, _ := val.(float64) return fv, nil } return dv, nil } // 只处理简单数据类型 func AnyToString(val any, dv string) (string, error) { switch val.(type) { case string: sv, _ := val.(string) return sv, nil case int: iv, _ := val.(int) return strconv.Itoa(iv), nil case int8: iv, _ := val.(int8) return strconv.FormatInt(int64(iv), 10), nil case int16: iv, _ := val.(int16) return strconv.FormatInt(int64(iv), 10), nil case int32: iv, _ := val.(int32) return strconv.FormatInt(int64(iv), 10), nil case int64: iv, _ := val.(int64) return strconv.FormatInt(iv, 10), nil case float32: fv, _ := val.(float32) return strconv.FormatFloat(float64(fv), 'f', -1, 64), nil case float64: fv, _ := val.(float64) return strconv.FormatFloat(fv, 'f', -1, 64), nil case bool: bv, _ := val.(bool) if bv { return "true", nil } return "false", nil } return dv, nil } // BytesToString converts byte slice to string. func BytesToString(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } func Atoi(b []byte) (int, error) { return strconv.Atoi(BytesToString(b)) } func ParseInt(b []byte, base int, bitSize int) (int64, error) { return strconv.ParseInt(BytesToString(b), base, bitSize) } func ParseUint(b []byte, base int, bitSize int) (uint64, error) { return strconv.ParseUint(BytesToString(b), base, bitSize) } func ParseFloat(b []byte, bitSize int) (float64, error) { return strconv.ParseFloat(BytesToString(b), bitSize) }