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

时间:2015-07-06 06:49:50

标签: string unicode go

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

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

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

2 个答案:

答案 0 :(得分:14)

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

您仍需要一种方法将角色置于指定位置。最简单的方法是将string转换为可以编制索引的[]rune。要将string转换为符文,只需使用类型转换[]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 range上的string遍历字符串的符文,因此您也可以使用它。它比将整个string转换为[]rune

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

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

将其包装成一个函数:

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

Go Playground上尝试这些。

另请注意,Go中的string作为[]byte存储在内存中,这是文本的UTF-8编码字节序列(请阅读博文Strings, bytes, runes and characters in Go了解更多信息)。如果您保证string使用代码小于127的字符,则可以使用字节。这是在Go索引中为string索引其字节,因此例如"s"[0]'s'的字节值,即115

fmt.Println("s"[0])      // Prints 115
fmt.Println("absdef"[2]) // Prints 115

答案 1 :(得分:4)

内部字符串是golang中的8位字节数组。所以每个字节都代表ascii值。

str:="abc"
byteValue := str[0]
intValue := int(byteValue)
fmt.Println(byteValue)//97
fmt.Println(intValue)//97