go中utf8编码问题

废话不多说先贴代码

package main

import "fmt"

func main() {
    a := "hello, world"
    b := "你好世界"
    fmt.Printf("%b %b\n", a[0], b[0])
    fmt.Printf("%b", 'h')
}
log如下
1101000 11100100
1101000

clipboard.png

图是截的go the programing language上面截的,说ascii编码都应该是0开头的啊,为什么打出来'h'的编码是1101000,这个让我有点懵啊?希望高手指点一下

阅读 6.8k
2 个回答

题主显然比较粗心啊...

你没有注意到 1101000 只有7位吗? 如果是按1个字节来算的话,是需要8位二进制的。
所以 a[0] 在%b模式下输出的内容其实是 01101000,换算成16进制则为0x68,查ASCII码表正好是 'h'

原因在于:很多时候打印函数会认为最高位为符号位,因此会将最高位为0的情况给省略掉不打印。

其余的,就不要我多说了吧。审题要仔细啊!!!

%b代表二进制

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题