Как получить на выходе "Е" вместо 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. Строки ведут себя как кусочки байтов. Руна - это целое число, определяющее кодовую точку 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
界
Читать:
Раздел « Спецификация языка программирования Go » о преобразованиях .
Как насчет этого ?
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 нет типа персонажа как такового. byte часто используется для символов ASCII, а rune используется для символов Unicode, но они оба являются просто псевдонимами для целочисленных типов (uint8 и int32). Поэтому, если вы хотите, чтобы они печатались как символы вместо чисел, вам нужно использовать Printf("%c", x)
. Спецификация %c
формата работает для любого целочисленного типа.
Вы также можете попробовать привести его к типу строки.
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1]))
}
Общее решение интерпретации символа как строки 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]
дать вам »