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'))
}