69가 아닌 "E"출력을 얻는 방법은 무엇입니까?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang에는 문자를 바이트로 또는 그 반대로 변환하는 기능이 있습니까?
69가 아닌 "E"출력을 얻는 방법은 무엇입니까?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang에는 문자를 바이트로 또는 그 반대로 변환하는 기능이 있습니까?
답변:
해석 된 문자열 리터럴은 개별 문자의 UTF-8 인코딩 (멀티 바이트)을 사용하는 큰 따옴표 ""사이의 문자 시퀀스입니다. UTF-8에서 ASCII 문자는 처음 128 개의 유니 코드 문자에 해당하는 1 바이트입니다. 문자열은 바이트 조각처럼 작동합니다. 룬은 유니 코드 코드 포인트를 식별하는 정수 값입니다. 따라서,
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
界
읽다:
전환 에 대한 프로그래밍 언어 사양 섹션으로 이동합니다 .
슬라이싱을 통해서도 가능합니다.
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
참고 : 이 솔루션은 ASCII 문자에만 적용됩니다.
Go에는 실제로 문자 유형이 없습니다. 바이트는 종종 ASCII 문자에 사용되고 rune은 유니 코드 문자에 사용되지만 둘 다 정수 유형 (uint8 및 int32)의 별칭 일뿐입니다. 따라서 숫자 대신 문자로 인쇄하도록 강제하려면을 사용해야 Printf("%c", x)
합니다. %c
형식 스펙은 임의의 정수 유형에 대한 작동합니다.
문자열에서 문자를 분리하는 또 다른 솔루션
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]))
// = 주석 처리 된 줄
len("cafés")
> len([]rune("cafés"))
과, 각 반복에 문자열을 다시 변환 할 수있다 O (n²). 그냥 할 for _, r := range word { fmt.Printf("%c", r) }
. 당신이 정말로 인덱스와 루프를 원하는 경우 for x := 0; x < limit; x++
. 제발 응답하기 전에 언어의 기초를 배울 질문입니다.
"हैलो"[:1]
당신에게 제공