2015-03-31 89 views
8

我有这样的代码:Golang类型[N]字节转换为[]字节

hashChannel <- []byte(md5.Sum(buffer.Bytes())) 

而且我得到这个错误:

cannot convert md5.Sum(buffer.Bytes()) (type [16]byte) to type []byte 

即使没有明确的转换,这并不工作。我能保持型[16]字节为好,但在某些时候,我需要转换,因为我送过来一个TCP连接:

_, _ = conn.Write(h) 

什么是转换它的最好方法是什么? 感谢

+4

'[:]'转换阵列以一个切片 – Volker 2015-03-31 07:42:48

回答

8

切片的阵列。例如,

package main 

import (
    "bytes" 
    "crypto/md5" 
    "fmt" 
) 

func main() { 
    var hashChannel = make(chan []byte, 1) 
    var buffer bytes.Buffer 
    sum := md5.Sum(buffer.Bytes()) 
    hashChannel <- sum[:] 
    fmt.Println(<-hashChannel) 
} 

输出:

[212 29 140 217 143 0 178 4 233 128 9 152 236 248 66 126] 
3

使用数组你可以让创建切片simple slice expression

foo := [5]byte{0, 1, 2, 3, 4} 
var bar []byte = foo[:] 

或者你的情况:

b := md5.Sum(buffer.Bytes()) 
hashChannel <- b[:] 
+1

BUG:'hashChannel < - md5.Sum(buffer.Bytes())[:]'错误是'无效操作md5.Sum(buffer.Bytes())[:](slice of unaddressable value)' – peterSO 2015-03-31 07:55:49

+0

peterSo:啊,是的。对不起。确实如此。更正了它 – ANisus 2015-03-31 08:05:34

+1

@ANisus你知道为什么我们需要引入一个中间变量'b'而不是仅仅使用'hashChannel < - md5.Sum(buffer.Bytes())[:]'例如? – boramalper 2017-07-23 22:56:07