2016-05-29 13 views
3

私は16進数をint、binary、asciiに変換するプログラムを書いています。 intとバイナリは正常に動作しましたが、asciiは問題を引き起こしています。入力テキストが2文字より短い場合は正常に動作しますが、それ以上のものがあれば不正な形式のテキストが表示されます。次のように私のコードは次のとおりです。Go Lang - 16進数を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 

をルーンズ 'しかし、私はこれがどのように動作するかについては不明です。これを実現するために使用できるビルトインの16進エンコード/デコードライブラリがありますか?

+0

ASCIIには「印刷可能な文字」のコンセプトがあります。つまり、一部の値にはグラフィック表現がない場合があります。 – ain

答えて

10

16進数をバイトにデコードできる標準ライブラリには、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

関連する問題