Làm thế nào để có đầu ra "E" thay vì 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang có chức năng chuyển đổi một char sang byte và ngược lại không?
Làm thế nào để có đầu ra "E" thay vì 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang có chức năng chuyển đổi một char sang byte và ngược lại không?
Câu trả lời:
Các ký tự chuỗi được thông dịch là chuỗi ký tự nằm giữa dấu ngoặc kép "" bằng cách sử dụng mã hóa UTF-8 (có thể là nhiều byte) của các ký tự riêng lẻ. Trong UTF-8, các ký tự ASCII là byte đơn tương ứng với 128 ký tự Unicode đầu tiên. Các chuỗi hoạt động giống như các lát byte. Rune là một giá trị số nguyên xác định một điểm mã Unicode. Vì thế,
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
}
Đầu ra:
e
e
界
Đọc:
Chuyển đến phần Đặc tả ngôn ngữ lập trình trên Chuyển đổi .
Làm thế nào về điều này ?
fmt.Printf("%c","HELLO"[1])
Như Peter chỉ ra, để cho phép nhiều hơn chỉ ASCII:
fmt.Printf("%c", []rune("HELLO")[1])
Có thể được thực hiện thông qua quá trình cắt
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
LƯU Ý: Giải pháp này chỉ hoạt động đối với các ký tự ASCII.
Go không thực sự có một kiểu ký tự như vậy. byte thường được sử dụng cho các ký tự ASCII và rune được sử dụng cho các ký tự Unicode, nhưng chúng chỉ là bí danh cho các kiểu số nguyên (uint8 và int32). Vì vậy, nếu bạn muốn buộc chúng phải được in dưới dạng ký tự thay vì số, bạn cần phải sử dụng Printf("%c", x)
. Đặc %c
tả định dạng hoạt động cho bất kỳ kiểu số nguyên nào.
Giải pháp chung để giải thích một biểu đồ dưới dạng một chuỗi là string("HELLO"[1])
.
Tất nhiên, giải pháp của Rich cũng hoạt động.
Một giải pháp khác để cô lập một ký tự trong một chuỗi
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
}
}
đối với mảng chuỗi cũng có:
fmt.Println(string([]rune(sArray[0])[0]))
// = dòng bình luận
len("cafés")
> len([]rune("cafés"))
và có thể chuyển đổi lại chuỗi trên mỗi lần lặp cho, O (n²). Chỉ cần làm for _, r := range word { fmt.Printf("%c", r) }
. Nếu bạn thực sự muốn lặp lại với một chỉ mục for x := 0; x < limit; x++
. Vui lòng tìm hiểu kiến thức cơ bản về một ngôn ngữ trước khi trả lời câu hỏi.
"हैलो"[:1]
nó mang lại cho bạn