请大佬帮忙指点一下 uint8 的疑问

2021-05-19 14:37:18 +08:00
 d0m2o08

go 中说 byte 是 uint8 的别名,长度为 1 个字节,用于表示 ASCII 字符

那 unit8 的取值范围是 0-255 ascii 只有 128 个字符

例如下面的代码

var b1 byte = 129
var b2 byte = 65
var b3 byte = 253

fmt.Println("b1", string(b1))
fmt.Println("b2", string(b2))
fmt.Println("b3", string(b3))

输出

b1 
b2 A
b3 ý

b1 转字符串之后是空的 b3 超过 128 了 打印出来字符串ý ascii 码表里又没有这个ý

我学不会了呢啊😂

1307 次点击
所在节点    Go 编程语言
4 条回复
ahhui
2021-05-19 14:47:37 +08:00
因为 string 转换的数据,并不是 byte,而是 unicode 的字符,而 ý 的 Unicode 码是:U+00FD,去掉高位 00,也就是 253 。所以转换后补码成了 2 个 byte 代表一个字符,高位 0,低位 253,正好就是 U+00FD,也就是 ý
emeab
2021-05-19 15:12:08 +08:00
go string() 只能转成 unicode 字符吧.
d0m2o08
2021-05-19 15:20:25 +08:00
@ahhui @emeab 感谢两位,string()和%c 都是转成对应的 unicode 码值,这个问题我清楚了,多谢多谢.
pabupa
2021-05-19 18:53:06 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777898

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX