JavaScript中的charCodeAt()
方法返回给定索引处字符的数字Unicode值(例如,Go lang等效于JavaScript的charCode()方法
"s".charCodeAt(0) // returns 115
我将如何去通过获得在围棋中相同的字符串/字母数字Unicode值?
JavaScript中的charCodeAt()
方法返回给定索引处字符的数字Unicode值(例如,Go lang等效于JavaScript的charCode()方法
"s".charCodeAt(0) // returns 115
我将如何去通过获得在围棋中相同的字符串/字母数字Unicode值?
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
另请注意,string
上的for range
迭代了字符串的符号,因此您也可以使用它。这比将整个string
到[]rune
更高效:
i := 0
for _, r := range "absdef" {
if i == 2 {
fmt.Println(r)
break
}
i++
}
包成一个功能:
func charCodeAt(s string, n int) rune {
i := 0
for _, r := range s {
if i == n {
return r
}
i++
}
return 0
}
尝试这些在Go Playground。
还要注意的是string
S IN围棋存储在内存中的[]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
谢谢。是的......我知道一个字符串被自动处理为一个字符数组。 JavaScript也这样做。 – Knights
@JheneKnights不,在一个字符串中存储的是字节片段,它是字符的utf-8编码字节序列。有关更多详细信息,请参阅此博客帖子:[Go中的字符串,字节,符文和字符](http://blog.golang.org/strings)。所以获得'符文'需要解码字节。 – icza
'charCodeAt'函数返回字节索引'n'处的符文,而不是符号索引'n'。见https://play.golang.org/p/QDLzyqSxkI –