Go Lang - 将十六进制转换为ASCII

问题描述:

我正在写一个转换程序将十六进制转换为int,binary和ascii。 int和二进制工作正常,但ascii导致问题。如果输入的文本短于2个字符,它可以正常工作,但是更长的时间会导致出现格式错误的文本。我的代码如下:Go Lang - 将十六进制转换为ASCII

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") 
    } 

} 

十六进位“73616d706c65‘当一些输出的例子:

Enter hex to convert: 73616d706c65 
Integer = 126862285106277 
Ascii = � 
Binary = 11100110110000101101101011100000110110001100101 

我已经做了很多的搜索,并在问候’已经看到了一些文件符文“,但我不确定这是如何工作的。是否有内置的十六进制编码/解码库可用于完成此?

+0

请记住,ASCII有一个“可打印的字符”,即一些值可能没有图形代表性的contistept。 – ain

标准库中有一个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)) 
} 

输出为 “样本”,你可以看到on the playground

+1

完美的作品,谢谢! – mk444