2016-08-30 93 views
-2

我有一個簡短的程序,將幾個二進制數轉換成它們的ASCII等價物。我今天嘗試將其轉換爲,發現strconv.Itoa()無法正常工作。字符串()做我希望strconv.Itoa()會做

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

其輸出

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

所以好像string()是做什麼的我以爲strconv.Itoa()會做。我期待第三欄顯示我在第四欄中的內容。這是一個錯誤還是我錯過了什麼?

+2

'strconv.Itoa'將'72'改爲'「72」'。符文已經是整數,所以'string(72)'給你與它相關的符文(''H'') –

+0

感謝downvotes。我閱讀文檔並將其搜索了一個小時。 – chicks

+3

Go的'strconv.Itoa'函數基於[C標準庫](http://www.cplusplus.com/reference/cstdlib/itoa/)中的'itoa'。 Go和C的行爲都有詳細的記錄。我沒有投票,但是因爲你的問題標題被描述爲一個陳述,並且你最終詢問一個_standard庫函數是否有明顯的bug,所以我並不驚訝這個downvotes。 –

回答

2

strconv.Itoa將整數格式化爲十進制字符串。例如:strconv.Itoa(65)strconv.Itoa('A')返回字符串"65"

string(intValue)會生成一個包含整數的UTF-8表示的字符串。例如:string('A')string(65)評估字符串"A"