如何将golang[]byte转换为字符串

seeyoup
  • 429

程序中使用到一段代码

data:=[4]byte{1,2,3,4}

想转成字符串显示,试了使用

str:=string(data)
fmt.Print(str)

但是输出为空白,不知道应该怎样转换?

回复
阅读 74.5k
5 个回答
✓ 已被采纳

ASCII编码不是都可见的。

package main

import (
    "fmt"
)

func main() {
    data := [4]byte{0x31, 0x32, 0x33, 0x34}
    str := string(data[:])
    fmt.Println(str)
}

不止要关注功能,还有性能。
字节数组强转转字符串是最耗时的,可以采用指针的方式,

func  String(b []byte) string {
    return *(*string)(unsafe.Pointer(&b))
}

更多的关于这方面的知识,可以参考我的博客 Go语言字符串高效拼接(二) ,有实际的性能测试和分析。

很简单,1,2,3,4映射到ascii码中都不是可见字符。

不信?

你打印65,66,67,68看看是不是大写的ABCD。

另附ASCII码表
http://baike.baidu.com/link?u...

这样做是不高效的,但是可以简写如下:

func convert( b []byte ) string {
    s := make([]string,len(b))
    for i := range b {
        s[i] = strconv.Itoa(int(b[i]))
    }
    return strings.Join(s,",")
}

调用

bytes := [4]byte{1,2,3,4}
str := convert(bytes[:])

会是空白吗?我以为会输出1,2,3,4对应的ascii码,特殊的字符

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏