我有一个简短的程序,可以将一些二进制数转换为它们的 ASCII 等价物。我试着把它翻译成
走今天发现这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))
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个输出
$ go run chm-tshirt.go
01000011 67 67 C
01001000 72 72 H
01001101 77 77 M
Run Code Online (Sandbox Code Playgroud)
所以似乎string()正在做我认为strconv.Itoa()会做的事情。我期待第三列显示我在第四列中得到的内容。这是一个错误还是我错过了什么?
strconv.Itoa将整数格式化为十进制字符串。示例:strconv.Itoa(65)并strconv.Itoa('A')返回字符串"65"。
string(intValue)产生一个包含整数的 UTF-8 表示的字符串。示例:string('A')并string(65)评估为字符串"A"。
经验表明,许多人错误地期望string(intValue)返回整数值的十进制表示。由于这种期望非常普遍,当整数值的类型不是or时,Go 1.15 版本会go vet 警告string(intValue)转换(在此处阅读详细信息)。runebyte