如何从Go?
中的十六进制值中获取字母值package main
import (
"encoding/hex"
"fmt"
)
func main() {
a := []byte{0x61}
c := hex.Dump(a)
fmt.Println(c,a)
}
答案 0 :(得分:3)
您可以使用fmt.Printf()
格式(example):
func main() {
a := []byte{0x61}
c := hex.Dump(a)
fmt.Printf("'%+v' -- '%s'\n", c, a)
}
输出:
'00000000 61 |a|
' -- 'a'
%s
格式足以转换“0x61
”中的a
。
答案 1 :(得分:1)
你的问题有点误导。
根据您的问题,您真正想要的是将byte
值或[]byte
(字节切片)转换为string
或字符(或多或少为{{1}在Go)。
从此以后,我将使用以下变量将单rune
值与byte
分开:
[]byte
要将其转换为b := byte(0x61)
bs := []byte{b}
,您只需使用最简洁,最简单的转换:
string
如果您想将其作为"字符",则可以将其转换为s := string(bs)
:
rune
另一种解决方案是使用fmt.Printf()
中提到的VonC's answer并使用r := rune(b)
动词:
%s
您可能想看看这些替代方案:
%s the uninterpreted bytes of the string or slice
%c the character represented by the corresponding Unicode code point
%q a single-quoted character literal safely escaped with Go syntax.
同时接受%q
,byte
和[]byte
。
请参阅此示例以演示这些(在Go Playground上尝试):
rune
输出:
b := byte(0x61)
bs := []byte{b}
fmt.Printf("%s\n", bs)
fmt.Printf("%c\n", b)
fmt.Println(string(bs))
fmt.Printf("%q\n", bs)
fmt.Printf("%q\n", b)
fmt.Printf("%q\n", rune(b))
如果您需要a
a
a
"a"
'a'
'a'
的结果,可以使用fmt.Sprintf()
中提到的satran's answer变体,如下所示:
string
但使用s := fmt.Sprintf("%s", bs)
转换(string
)更容易。
答案 2 :(得分:0)
如果您只想要字符串fmt.Sprintf
。
package main
import (
"fmt"
)
func main() {
a := []byte{0x61}
c := fmt.Sprintf("%s", a)
fmt.Println(c)
}