Як отримати вихід "Е", а не 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Чи є у Golang функція перетворення символу в байт і навпаки?
Як отримати вихід "Е", а не 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Чи є у Golang функція перетворення символу в байт і навпаки?
Відповіді:
Інтерпретовані рядкові літерали - це послідовності символів між подвійними лапками, "" використовуючи (можливо, багатобайтове) кодування UTF-8 окремих символів. У UTF-8 символи ASCII є однобайтовими, що відповідає першим 128 символам 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
界
Читати:
Перейдіть до розділу специфікації мови програмування, присвяченого перетворенням .
Як щодо цього ?
fmt.Printf("%c","HELLO"[1])
Як зазначає Петро, щоб дозволити не лише ASCII:
fmt.Printf("%c", []rune("HELLO")[1])
Це можна зробити за допомогою нарізки теж
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
ПРИМІТКА. Це рішення працює лише для символів ASCII.
У Go насправді немає типу персонажа як такого. байт часто використовується для символів ASCII, а руна використовується для символів Unicode, але обидва вони є просто псевдонімами для цілочисельних типів (uint8 та int32). Отже, якщо ви хочете змусити їх друкувати як символи замість цифр, вам потрібно використовувати Printf("%c", x)
. Специфікація %c
формату працює для будь-якого цілочисельного типу.
Ви також можете спробувати ввести його за допомогою рядка.
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1]))
}
Загальним рішенням для інтерпретації символу char як рядка є string("HELLO"[1])
.
Рішення Річа теж працює, звичайно.
Ще одне рішення для виділення символу в рядок
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]
це дасть