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

Go 如何将字节类型值转换为int类型值,go,type-conversion,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

有关以下代码:

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时,UTF编码值为0,即48?

您可以使用以下方法

比如说


您可以在此处运行以下代码

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

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.Printlnreflect.TypeOfstr[0]-“0”那样使用它,则会得到值为0的uint8
在go Playder中尝试它

您的格式设置不正确。尝试fmt.Printf%T、%c、.%d打印十进制值。0和0不是一回事。@Marc yes 48是0的编码值。类型转换不是将0转换为0吗?我需要使用strconv.Atoi吗?使用代码修改编辑的查询否,当然不是。这将是解析,而不是类型转换。@overexchange根据您的逻辑,您将如何映射“a”?
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'))
}