Golang一维数组访问a[0][0]返回字符ASCII值的原因咨询
解答:为什么
a[0][0]返回字符'a'的ASCII值 嘿,这个问题其实是Go语言里字符串的底层实现特性导致的,我来给你掰扯清楚:
首先,你的数组a是一维的字符串数组,a[0]取到的是字符串"a"——这部分你应该没问题。关键在于Go里的字符串本质是UTF-8编码的字节序列,当你对字符串使用索引(比如s[i])的时候,返回的并不是你直观以为的"字符",而是该位置对应的字节值(类型是uint8,也就是无符号8位整数)。
放到你的例子里:
- 字符串
"a"在UTF-8编码中只占1个字节,这个字节的十六进制值是0x61,转换成十进制就是97,正好是ASCII表中'a'对应的数值。 - 你写的
a[0][0],其实是先拿到a[0]这个字符串,再取它的第0个字节,fmt.Println遇到uint8类型的值时,会直接输出它的数值,而不是转成对应的字符,所以最终打印出97。
如果想要输出字符'a'而不是数值97,你可以把这个字节值转换成string类型,修改后的代码如下:
package main import ( "fmt" ) func main() { a := [3]string{"a","b","c"} fmt.Println(string(a[0][0])) // 这里会输出 'a' }
额外提一句:如果你的字符串包含多字节的UTF-8字符(比如中文"你好"),直接用索引访问得到的只是单个字节,不是完整的字符,这时候想要遍历每个字符,应该用for range循环,而不是普通的索引循环哦。
内容的提问来源于stack exchange,提问作者parul setia
相关产品推荐
相关产品推荐

