V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
d0m2o08
V2EX  ›  Go 编程语言

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

  •  
  •   d0m2o08 · 2021-05-19 14:37:18 +08:00 · 1301 次点击
    这是一个创建于 1072 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 码表里又没有这个ý

    我学不会了呢啊😂

    4 条回复    2021-05-19 18:53:06 +08:00
    ahhui
        1
    ahhui  
       2021-05-19 14:47:37 +08:00   ❤️ 1
    因为 string 转换的数据,并不是 byte,而是 unicode 的字符,而 ý 的 Unicode 码是:U+00FD,去掉高位 00,也就是 253 。所以转换后补码成了 2 个 byte 代表一个字符,高位 0,低位 253,正好就是 U+00FD,也就是 ý
    emeab
        2
    emeab  
       2021-05-19 15:12:08 +08:00   ❤️ 1
    go string() 只能转成 unicode 字符吧.
    d0m2o08
        3
    d0m2o08  
    OP
       2021-05-19 15:20:25 +08:00
    @ahhui @emeab 感谢两位,string()和%c 都是转成对应的 unicode 码值,这个问题我清楚了,多谢多谢.
    pabupa
        4
    pabupa  
       2021-05-19 18:53:06 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5285 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:49 · PVG 13:49 · LAX 22:49 · JFK 01:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.