123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- package gconv
- import (
- "math"
- "strconv"
- "github.com/gogf/gf/v2/encoding/gbinary"
- )
- // Uint converts `any` to uint.
- func Uint(any interface{}) uint {
- if any == nil {
- return 0
- }
- if v, ok := any.(uint); ok {
- return v
- }
- return uint(Uint64(any))
- }
- // Uint8 converts `any` to uint8.
- func Uint8(any interface{}) uint8 {
- if any == nil {
- return 0
- }
- if v, ok := any.(uint8); ok {
- return v
- }
- return uint8(Uint64(any))
- }
- // Uint16 converts `any` to uint16.
- func Uint16(any interface{}) uint16 {
- if any == nil {
- return 0
- }
- if v, ok := any.(uint16); ok {
- return v
- }
- return uint16(Uint64(any))
- }
- // Uint32 converts `any` to uint32.
- func Uint32(any interface{}) uint32 {
- if any == nil {
- return 0
- }
- if v, ok := any.(uint32); ok {
- return v
- }
- return uint32(Uint64(any))
- }
- // Uint64 converts `any` to uint64.
- func Uint64(any interface{}) uint64 {
- if any == nil {
- return 0
- }
- switch value := any.(type) {
- case int:
- return uint64(value)
- case int8:
- return uint64(value)
- case int16:
- return uint64(value)
- case int32:
- return uint64(value)
- case int64:
- return uint64(value)
- case uint:
- return uint64(value)
- case uint8:
- return uint64(value)
- case uint16:
- return uint64(value)
- case uint32:
- return uint64(value)
- case uint64:
- return value
- case float32:
- return uint64(value)
- case float64:
- return uint64(value)
- case bool:
- if value {
- return 1
- }
- return 0
- case []byte:
- return gbinary.DecodeToUint64(value)
- default:
- if f, ok := value.(iUint64); ok {
- return f.Uint64()
- }
- s := String(value)
- // Hexadecimal
- if len(s) > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X') {
- if v, e := strconv.ParseUint(s[2:], 16, 64); e == nil {
- return v
- }
- }
- // Decimal
- if v, e := strconv.ParseUint(s, 10, 64); e == nil {
- return v
- }
- // Float64
- if valueFloat64 := Float64(value); math.IsNaN(valueFloat64) {
- return 0
- } else {
- return uint64(valueFloat64)
- }
- }
- }
|