Comment obtenir une sortie "E" au lieu de 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang a-t-il la fonction de convertir un caractère en octet et vice versa?
Les littéraux de chaîne interprétés sont des séquences de caractères entre guillemets "" utilisant le codage UTF-8 (éventuellement sur plusieurs octets) de caractères individuels. Dans UTF-8, ASCII les caractères sont des octets correspondant aux 128 premiers caractères Unicode. Les chaînes se comportent comme des tranches d’octets. Une rune est une valeur entière identifiant un point de code Unicode. Par conséquent,
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
}
Sortie:
e
e
界
Lis:
Aller à la spécification du langage de programmation Section sur Conversions .
Que diriez-vous de this ?
fmt.Printf("%c","HELLO"[1])
Comme Peter le fait remarquer, pour permettre plus qu’un simple ASCII:
fmt.Printf("%c", []rune("HELLO")[1])
Go n'a pas vraiment de type de personnage en tant que tel. byte est souvent utilisé pour ASCII caractères, et rune est utilisé pour les caractères Unicode, mais ce ne sont que des alias pour les types entiers (uint8 et int32). Donc, si vous voulez les forcer à être imprimés en tant que caractères au lieu de chiffres, vous devez utiliser Printf("%c", x)
. Le %c
La spécification de format fonctionne pour tout type entier.
Peut être fait en tranchant aussi
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
La solution générale pour interpréter un caractère en tant que chaîne est string("HELLO"[1])
.
La solution de Rich fonctionne également, bien sûr.
Essayez ceci pour obtenir les caractères par leur index
package main
import (
"fmt"
"strings"
)
func main() {
str := strings.Split("HELLO","")
fmt.Print(str[1])
}