Go Lang - 将Hex转换为ASCII

mk4*_*444 5 hex ascii go

我正在编写一个go程序来将hex转换为int,binary和ascii.int和二进制文件工作正常,但ascii导致问题.如果输入文本短于2个字符,则它可以正常工作,但任何更长的文本都会导致出现格式错误的文本.我的代码如下:

package main

import "fmt"
import "strconv"

func main() {

    // get input as string
    fmt.Print("Enter hex to convert: ")
    var input_hex string = ""
    fmt.Scanln(&input_hex)

    // convert hex to int and print outputs
    if i, err := strconv.ParseInt(input_hex, 16, 0); err != nil {
        fmt.Println(err)
    } else {
        // int
        fmt.Print("Integer = ")
        fmt.Println(i)
        // ascii
        fmt.Print("Ascii = ")
        fmt.Printf("%c", i)
        fmt.Println("")
        // bin
        fmt.Print("Binary = ")
        fmt.Printf("%b", i)
        fmt.Println("\n")
    }

}
Run Code Online (Sandbox Code Playgroud)

输入hex'73616d706c65 ' 时输出的一些示例:

Enter hex to convert: 73616d706c65
Integer = 126862285106277
Ascii = ?
Binary = 11100110110000101101101011100000110110001100101
Run Code Online (Sandbox Code Playgroud)

我已经做了很多搜索,并且看过一些关于'符文'的文档,但我不确定它是如何工作的.是否有内置的十六进制编码/解码库可用于实现此目的?

Pau*_*kin 13

hex标准库中有一个包可以将十六进制解码为字节.如果它是有效的utf-8(所有ASCII都是),则可以将其显示为字符串.

这是在行动:

package main

import (
    "encoding/hex"
    "fmt"
)

func main() {
    a := "73616d706c65"
    bs, err := hex.DecodeString(a)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(bs))
}
Run Code Online (Sandbox Code Playgroud)

输出是"样本",您可以在操场上看到.