69ではなく「E」出力を取得する方法は?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golangには、文字をバイトに、またはその逆に変換する機能がありますか?
解釈された文字列リテラルは、個々の文字の(おそらくマルチバイトの)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
界
読む:
this ?
fmt.Printf("%c","HELLO"[1])
Peterが指摘しているように、単なるASCII以上のものを許可するには:
fmt.Printf("%c", []rune("HELLO")[1])
Goには実際には文字タイプがありません。バイトはASCII文字によく使用され、ルーンはUnicode文字に使用されますが、どちらも整数型(uint8およびint32)のエイリアスにすぎません。したがって、それらを数字ではなく文字として印刷する場合は、Printf("%c", x)
を使用する必要があります。 %c
形式仕様は、任意の整数型に対して機能します。
スライスを介して行うこともできます
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
文字を文字列として解釈する一般的な解決策は、string("HELLO"[1])
です。
もちろん、Richのソリューションも機能します。
インデックスで文字を取得するにはこれを試してください
package main
import (
"fmt"
"strings"
)
func main() {
str := strings.Split("HELLO","")
fmt.Print(str[1])
}