Go:将十六进制转换为字母

时间:2015-03-05 14:21:36

标签: string go formatting hex

如何从Go?

中的十六进制值中获取字母值
package main

import (
    "encoding/hex"
    "fmt"
)

func main() {
    a := []byte{0x61}
    c := hex.Dump(a)
    fmt.Println(c,a)
}

http://play.golang.org/p/7iAs2kKw5v

3 个答案:

答案 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. 同时接受%qbyte[]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)
}