2016-08-30 3 views
-2

私は、いくつかのバイナリ数値をASCII相当のものに変換する短いプログラムを持っています。私は今日これをに翻訳しようとしましたが、strconv.Itoa()が私の期待通りに動作しないことがわかりました。string()はstrconv.Itoa()がやりたいと思ったことを行います

string()私は strconv.Itoa()が何だろうと思った何をやっているようなので、それはそう

$ go run chm-tshirt.go 
01000011 67 67 C 
01001000 72 72 H 
01001101 77 77 M 

を出力

// translate Computer History Museum t-shirt 
// http://i.ebayimg.com/images/g/qksAAOSwaB5XjsI1/s-l300.jpg 

package main 

import (
     "fmt" 
     "strconv" 
) 

func main() { 
     var binaryStrings [3]string 
     binaryStrings = [3]string{"01000011","01001000","01001101"} 

     for _,bin := range binaryStrings { 
       if decimal, err := strconv.ParseInt(bin, 2, 64); err != nil { 
         fmt.Println(err) 
       } else { 
         letter := strconv.Itoa(int(decimal)) 
         fmt.Println(bin, decimal, letter, string(decimal)) 
       } 
     } 
} 

。私は3列目が4列目のものを表示することを期待していました。これはバグですか、何が欠けていますか?

+2

'strconv.Itoa'は' 72'を '' 72 "'に変更します。ルーンはすでに整数なので、 'string(72)'はそれに関連付けられたルーンを与えます( '' H'') –

+0

downvotesに感謝します。私はドキュメントを読んで、これを1時間Google検索しました。 – chicks

+3

Goの 'strconv.Itoa'関数は[C標準ライブラリ](http://www.cplusplus.com/reference/cstdlib/itoa/)の' itoa'に基づいています。振る舞いはGoとCの両方でよく書かれています。私は投票しませんでしたが、あなたの質問のタイトルは文として表現され、_standardライブラリのfunction_に明らかなバグがあるかどうかを尋ねることで終わります。 –

答えて

2

strconv.Itoaは、10進数の文字列として整数をフォーマットします。例:strconv.Itoa(65)およびstrconv.Itoa('A')は、文字列"65"を返します。

は、整数のUTF-8表現を含む文字列を生成します。例:string('A')およびstring(65)は、文字列"A"と評価されます。

関連する問題