如何在Go中将[Size]字节转换为字符串?

时间:2014-09-27 08:43:34

标签: go type-conversion

我在执行md5.Sum()之后得到了一个大小的字节数组。

data := []byte("testing")
var pass string 
var b [16]byte
b = md5.Sum(data)
pass = string(b)

我收到错误:

  

无法将b(类型[16]字节)转换为类型字符串

5 个答案:

答案 0 :(得分:22)

您可以将其称为切片:

pass = string(b[:])

答案 1 :(得分:16)

有点晚,但请记住,使用string(b[:])将主要打印无效字符。

如果你想尝试像php一样获得它的十六进制表示,你可以使用类似的东西:

data := []byte("testing")
b := md5.Sum(data)

//this is mostly invalid characters
fmt.Println(string(b[:]))

pass := hex.EncodeToString(b[:])
fmt.Println(pass)
// or
pass = fmt.Sprintf("%x", b)
fmt.Println(pass)

playground

答案 2 :(得分:5)

可以通过这个解决

pass = fmt.Sprintf("%x", b)

import "encoding/base64"
pass = base64.StdEncoding.EncodeToString(b[:])

这将把它编码为base64字符串

答案 3 :(得分:4)

分一杯羹:

pass = string(b[:])

答案 4 :(得分:0)

虽然这里有一些简单的答案,但我想给出一个更有效的解决方案

func Bytes2StrImp(b []byte) string{
    sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&b))
    sh := reflect.StringHeader{
        Data: sliceHeader.Data,
        Len:  sliceHeader.Len,
    }
    return *(*string)(unsafe.Pointer(&sh))
}

使用 string(b[:]) 的基准测试结果

func Bytes2StrRaw(b []byte) string {
    return string(b[:])
}
BenchmarkBytes2StrRaw-12              275305142                4.40 ns/op
BenchmarkBytes2StrImp-12              1000000000               0.244 ns/op