Go lang相当于JavaScript的charCode()方法

Kni*_*hts 6 string unicode go

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

"s".charCodeAt(0) // returns 115
Run Code Online (Sandbox Code Playgroud)

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

icz*_*cza 14

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

你仍然需要一种方法来获得指定位置的角色.最简单的方法是将转换string到一个[]rune你可以索引.要将a转换string为符文,只需使用类型转换[]rune("some string"):

fmt.Println([]rune("s")[0])
Run Code Online (Sandbox Code Playgroud)

打印:

115
Run Code Online (Sandbox Code Playgroud)

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

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

另请注意,for rangeon on string迭代字符串的符文,因此您也可以使用它.它比将整体转换string[]rune:

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

请注意,计数器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
}
Run Code Online (Sandbox Code Playgroud)

Go Playground尝试这些.

另请注意,stringGo中的s作为[]byte文本的UTF-8编码字节序列存储在内存中(有关详细信息,请阅读Go中的文章字符串,字节,符文和字符).如果您保证string使用代码小于127的字符,则可以使用字节.即编入索引string在Go索引其字节,所以例如"s"[0]是字节值的's'哪个是115.

fmt.Println("s"[0])      // Prints 115
fmt.Println("absdef"[2]) // Prints 115
Run Code Online (Sandbox Code Playgroud)

  • @JheneKnights不,在Go中,`string`被存储为内存中的`bytes`片段,这是字符的`utf-8`编码字节序列.有关更多详细信息,请参阅此博客文章:[Go中的字符串,字节,符文和字符](http://blog.golang.org/strings).所以获得`符文需要解码字节. (3认同)

rho*_*zet 5

在 golang 中 string 内部是一个 8 位字节数组。所以每个字节都代表ascii值。

str:="abc"
byteValue := str[0]
intValue := int(byteValue)
fmt.Println(byteValue)//97
fmt.Println(intValue)//97
Run Code Online (Sandbox Code Playgroud)