首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript的charCode()方法的Go lang等价方法

JavaScript的charCode()方法的Go lang等价方法
EN

Stack Overflow用户
提问于 2015-07-06 14:49:50
回答 2查看 15.5K关注 0票数 11

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

代码语言:javascript
复制
"s".charCodeAt(0) // returns 115

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-06 14:54:35

Go中的字符类型是rune,它是int32的别名,所以它已经是一个数字了,只需打印它。

您仍然需要一种方法来获取指定位置上的字符。最简单的方法是将string转换为可以索引的[]rune。要将string转换为runes,只需使用类型转换[]rune("some string")

代码语言:javascript
复制
fmt.Println([]rune("s")[0])

打印:

代码语言:javascript
复制
115

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

代码语言:javascript
复制
fmt.Println([]rune("absdef")[2])      // Also prints 115
fmt.Printf("%c", []rune("absdef")[2]) // Prints s

还要注意,string上的for range遍历字符串的符文,因此您也可以使用它。它比将整个string转换为[]rune更有效

代码语言:javascript
复制
i := 0
for _, r := range "absdef" {
    if i == 2 {
        fmt.Println(r)
        break
    }
    i++
}

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

将其封装到一个函数中:

代码语言:javascript
复制
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的形式存储在内存中的,这是文本的UTF8编码字节序列(更多信息,请阅读博客文章Strings, bytes, runes and characters in Go )。如果您保证string使用的字符的代码小于127,则只需处理字节即可。也就是说,在Go中索引string会索引它的字节,例如,"s"[0]'s'的字节值,它是115

代码语言:javascript
复制
fmt.Println("s"[0])      // Prints 115
fmt.Println("absdef"[2]) // Prints 115
票数 20
EN

Stack Overflow用户

发布于 2018-04-06 10:17:29

在内部,string是golang中的一个8位字节数组。因此,每个字节都将表示ascii值。

代码语言:javascript
复制
str:="abc"
byteValue := str[0]
intValue := int(byteValue)
fmt.Println(byteValue)//97
fmt.Println(intValue)//97
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31239330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档