¿Cómo obtener una salida "E" en lugar de 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
¿Golang tiene la función de convertir un carácter en un byte y viceversa?
¿Cómo obtener una salida "E" en lugar de 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
¿Golang tiene la función de convertir un carácter en un byte y viceversa?
Respuestas:
Los literales de cadena interpretados son secuencias de caracteres entre comillas dobles "" que utilizan la codificación UTF-8 (posiblemente de varios bytes) de caracteres individuales. En UTF-8, los caracteres ASCII son de un solo byte correspondientes a los primeros 128 caracteres Unicode. Las cadenas se comportan como porciones de bytes. Una runa es un valor entero que identifica un punto de código Unicode. Por lo tanto,
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
}
Salida:
e
e
界
Leer:
Vaya a la sección Especificación del lenguaje de programación sobre conversiones .
¿Qué tal esto ?
fmt.Printf("%c","HELLO"[1])
Como señala Peter, para permitir algo más que ASCII:
fmt.Printf("%c", []rune("HELLO")[1])
También se puede hacer mediante rebanado
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
NOTA: Esta solución solo funciona para caracteres ASCII.
Go realmente no tiene un tipo de personaje como tal. byte se usa a menudo para caracteres ASCII y rune se usa para caracteres Unicode, pero ambos son solo alias para tipos enteros (uint8 e int32). Entonces, si desea forzar que se impriman como caracteres en lugar de números, debe usar Printf("%c", x)
. La %c
especificación de formato funciona para cualquier tipo de entero.
También puedes intentar encasillarlo con una cuerda.
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1]))
}
La solución general para interpretar un carácter como una cadena es string("HELLO"[1])
.
La solución de Rich también funciona, por supuesto.
Otra solución para aislar un carácter en una cadena
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
}
}
para matrices de cadenas también:
fmt.Println(string([]rune(sArray[0])[0]))
// = línea comentada
len("cafés")
> len([]rune("cafés"))
y puede reconvertir la cadena en cada iteración para, O (n²). Solo hazlo for _, r := range word { fmt.Printf("%c", r) }
. Si realmente quisieras hacer un bucle con un índice for x := 0; x < limit; x++
. Por favor, aprende los conceptos básicos de un idioma antes de responder preguntas
"हैलो"[:1]
te da