一尘不染

Go lang等效于JavaScript的charCode()方法

go

charCodeAt()JavaScript中的方法返回给定索引处字符的数字Unicode值,例如

"s".charCodeAt(0) // returns 115

如何在Go中获取相同字符串/字母的数字unicode值?


阅读 225

收藏
2020-07-02

共1个答案

一尘不染

Go中的字符类型rune是别名,int32因此它已经是数字,只需打印即可。

您仍然需要一种方法来使角色位于指定位置。最简单的方法是将转换string到一个[]rune你可以索引。要将a转换string为符文,只需使用type
conversion即可[]rune("some string")

fmt.Println([]rune("s")[0])

印刷品:

115

如果希望将其打印为字符,请使用%c格式字符串:

fmt.Println([]rune("absdef")[2])      // Also prints 115
fmt.Printf("%c", []rune("absdef")[2]) // Prints s

还要注意,for rangeon string迭代字符串的符文,因此您也可以使用它。比将整体转换string[]rune

i := 0
for _, r := range "absdef" {
    if i == 2 {
        fmt.Println(r)
        break
    }
    i++
}

请注意,该计数器i必须是一个不同的计数器,它不能是循环迭代变量,因为它for range返回字节位置而不是rune索引(如果stringUTF-8表示中包含多字节字符,则该索引将有所不同)。

将其包装为一个函数:

func charCodeAt(s string, n int) rune {
    i := 0
    for _, r := range s {
        if i == n {
            return r
        }
        i++
    }
    return 0
}

Go Playground上尝试一下。

还要注意,stringGo中的s作为a存储在内存中,[]byte这是文本的UTF-8编码字节序列(有关更多信息,请阅读博客文章Go中的字符串,字节,符文和字符)。如果您保证string使用的代码少于127个字符,则可以简单地使用字节。那就是string在Go中索引a
索引其字节,因此例如"s"[0]它的字节值's'115

fmt.Println("s"[0])      // Prints 115
fmt.Println("absdef"[2]) // Prints 115
2020-07-02