我在执行md5.Sum()
之后得到了一个大小的字节数组。
data := []byte("testing")
var pass string
var b [16]byte
b = md5.Sum(data)
pass = string(b)
我收到错误:
无法将b(类型[16]字节)转换为类型字符串
答案 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)
答案 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