如何将字节类型值转换为int类型值

时间:2020-08-24 16:56:09

标签: go type-conversion

对于以下代码:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    str := "0125"
    fmt.Println(reflect.TypeOf(str[0]))
    intVar := int(str[0])
    fmt.Println(intVar)
}

下面是输出:

uint8
48

类型转换是将uint8类型值0str[0])转换为int类型值0

为什么将uint8类型转换为int,并采用0(即48)的UTF编码值?

2 个答案:

答案 0 :(得分:2)

您可以使用以下方法

例如

package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := []byte("0125")
    aByteToInt, _ := strconv.Atoi(string(str))
    fmt.Println(aByteToInt)
}

您可以在https://play.golang.org/p/iq8Q9PkhM43

处运行以下代码

答案 1 :(得分:1)

ASCII值0为48,这就是您在方案中获得数字48的原因。这是进行中的预期行为。一种更简单的解决方案如下,

package main

import (
    "fmt"
    "reflect"
)

func main() {
    str := "0125"
    fmt.Println(reflect.TypeOf(str[0]))
    // Subtract ascii value of 0 from your ascii number and you will get integer number
    // Here it will be 48 - 48 = 0
    fmt.Println(int(str[0] - '0'))
    // Here it will be 49 - 48 = 1
    fmt.Println(int(str[1] - '0'))
}

如果删除类型转换并像fmt.Println(reflect.TypeOf(str[0] - '0))一样使用它,您将获得uint8,其值为0 在游乐场https://play.golang.org/p/tdbWS-44VLB

中尝试