对于以下代码:
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
类型值0
(str[0]
)转换为int
类型值0
为什么将uint8
类型转换为int
,并采用0
(即48
)的UTF编码值?
答案 0 :(得分:2)
您可以使用以下方法
例如
package main
import (
"fmt"
"strconv"
)
func main() {
str := []byte("0125")
aByteToInt, _ := strconv.Atoi(string(str))
fmt.Println(aByteToInt)
}
处运行以下代码
答案 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