【发布时间】:2015-05-06 22:49:31
【问题描述】:
如何从 Go 中的十六进制值中获取字母值?
package main
import (
"encoding/hex"
"fmt"
)
func main() {
a := []byte{0x61}
c := hex.Dump(a)
fmt.Println(c,a)
}
【问题讨论】:
标签: string go formatting hex
如何从 Go 中的十六进制值中获取字母值?
package main
import (
"encoding/hex"
"fmt"
)
func main() {
a := []byte{0x61}
c := hex.Dump(a)
fmt.Println(c,a)
}
【问题讨论】:
标签: string go formatting hex
您可以使用fmt.Printf() 格式(example):
func main() {
a := []byte{0x61}
c := hex.Dump(a)
fmt.Printf("'%+v' -- '%s'\n", c, a)
}
输出:
'00000000 61 |a|
' -- 'a'
%s 格式足以转换 'a' 中的 0x61。
【讨论】:
你的问题有点误导。
根据您的问题,您真正想要的是将byte 值或[]byte(字节切片)转换为string 或字符(在Go 中或多或少是rune)。
从今以后,我将使用这些变量将单个 byte 值与 []byte 分开:
b := byte(0x61)
bs := []byte{b}
要将其转换为string,您只需使用最干净、最简单的转换即可:
s := string(bs)
如果你想要它作为一个“字符”,你可以将它转换成rune:
r := rune(b)
另一种解决方案是使用VonC's answer 中提到的fmt.Printf() 并使用%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 和 rune。
查看这个小例子来演示这些(在Go Playground 上试试):
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'
如果您需要string 形式的结果,您可以使用satran's answer 中提到的fmt.Sprintf() 变体,如下所示:
s := fmt.Sprintf("%s", bs)
但只使用string 转换(string(bs))会更容易。
【讨论】:
如果你只想要字符串,你可以fmt.Sprintf。
package main
import (
"fmt"
)
func main() {
a := []byte{0x61}
c := fmt.Sprintf("%s", a)
fmt.Println(c)
}
【讨论】: