127

如何获得“E”输出而不是 69?

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

Golang 是否具有将 char 转换为 byte 的功能,反之亦然?

4

10 回答 10

188

解释的字符串文字是双引号 "" 之间的字符序列,使用单个字符的(可能是多字节)UTF-8 编码。在 UTF-8 中,ASCII 字符是对应于前 128 个 Unicode 字符的单字节字符。字符串的行为类似于字节片。符文是标识 Unicode 代码点的整数值。所以,

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))              // ASCII only
    fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
    fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
}

输出:

e
e
界

读:

Go Programming Language Specification关于转换的部分。

Go 博客:Go 中的字符串、字节、符文和字符

于 2013-02-22T08:51:37.360 回答
24

这个怎么样?

fmt.Printf("%c","HELLO"[1])

正如彼得指出的那样,允许的不仅仅是 ASCII:

fmt.Printf("%c", []rune("HELLO")[1])
于 2013-02-22T07:08:36.687 回答
12

也可以通过切片完成

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1:2])
}

注意:此解决方案仅适用于 ASCII 字符。

于 2018-03-24T11:04:32.203 回答
10

您也可以尝试使用字符串进行类型转换。

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))
}
于 2019-10-03T12:32:09.180 回答
8

Go 并没有真正的字符类型。byte 常用于 ASCII 字符,rune 用于 Unicode 字符,但它们都只是整数类型(uint8 和 int32)的别名。因此,如果您想强制将它们打印为字符而不是数字,则需要使用Printf("%c", x). %c格式规范适用于任何整数类型。

于 2013-02-22T16:18:49.190 回答
5

将 char 解释为字符串的一般解决方案是string("HELLO"[1]).

当然,Rich 的解决方案也有效。

于 2013-02-22T07:29:58.120 回答
1

试试这个通过他们的索引来获取字符

package main

import (
      "fmt"
      "strings"
)

func main() {
   str := strings.Split("HELLO","")
    fmt.Print(str[1])
}
于 2019-06-07T12:46:38.617 回答
1

字符串字符是符文,因此要打印它们,您必须将它们转回字符串。

fmt.Print(string("HELLO"[1]))

于 2020-10-01T15:32:56.957 回答
-3

隔离字符串中字符的另一种解决方案

package main
import "fmt"

   func main() {
        var word string = "ZbjTS"

       // P R I N T 
       fmt.Println(word)
       yo := string([]rune(word)[0])
       fmt.Println(yo)

       //I N D E X 
       x :=0
       for x < len(word){
           yo := string([]rune(word)[x])
           fmt.Println(yo)
           x+=1
       }

}

对于字符串数组也:

fmt.Println(string([]rune(sArray[0])[0]))

// = 注释行

于 2015-01-08T04:50:43.227 回答
-3

解决方案将是:

 package main

 import "fmt"

func main() {
  str := "HELLO"
  string(str[0])//H
  string(str[1])//E
  string(str[2])//L
  string(str[3])//L
  string(str[4])//O
}
于 2021-07-27T01:57:32.247 回答