2 回答
TA贡献1815条经验 获得超10个赞
sha3.New224()不能用 uint64 类型表示。
有许多哈希类型 - 并且大小不同。Go标准库选择一个非常通用的接口来涵盖所有类型的哈希:https://golang.org/pkg/hash/#Hash
type Hash interface {
io.Writer
Sum(b []byte) []byte
Reset()
Size() int
BlockSize() int
}
话虽如此,一些Go哈希实现可以选择性地包括额外的方法,如哈希。哈希64:
type Hash64 interface {
Hash
Sum64() uint64
}
其他人可以实现编码。BinaryMarshaler:
type BinaryMarshaler interface {
MarshalBinary() (data []byte, err error)
}
可以用来保留哈希状态。
sha3.New224()不实现上述 2 个接口,但哈希实现。要执行运行时检查,请执行以下操作:crc64
h64, ok := h.(hash.Hash64)
if ok {
fmt.Printf("64-bit: %d\n", h64.Sum64())
}
工作示例:https://play.golang.org/p/uLUfw0gMZka
TA贡献1942条经验 获得超3个赞
(有关更简单的版本,请参阅彼得的评论。
将一系列字节解释为 a 与将一系列十进制数字解释为任意大数字相同。例如,要将数字 1234 转换为“数字”,请执行以下操作:big.Int
从 0 开始
乘以 10 = 0
加 1 = 1
乘以 10 = 10
加 2 = 12
乘以 10 = 120
加 3 = 123
乘以 10 = 1230
加 4 = 1234
这同样适用于字节。“数字”只是以256为基数,而不是以10为基数:
val := big.NewInt(0)for i := 0; i < h.Size(); i++ { val.Lsh(val, 8) val.Add(val, big.NewInt(int64(d[i]))) }
(Lsh
是左移。左移 8 位与乘以 256 相同。
- 2 回答
- 0 关注
- 232 浏览
添加回答
举报