gpt4 book ai didi

go - 连接 []byte 和哈希

转载 作者:IT王子 更新时间:2023-10-29 02:00:58 25 4
gpt4 key购买 nike

我有类似的东西

unixtime := time.Now().Unix()

unixtimeStr := string(unixtime)

soup := make([]byte, len(data) + len(nonce) + len(unixtimeStr) + len(previousHash))

copy(soup[:], data)
copy(soup[len(data):], nonce)
copy(soup[len(data) + len(nonce):], []byte(unixtimeStr))
copy(soup[len(data) + len(nonce) + len(unixtimeStr):], previousHash)

hasher := sha1.New()
hasher.Write(soup)
var hash []byte = hasher.Sum(nil)

datanoncepreviousHash 都是 []byte 类型。

我觉得它很脏而且不可读!

我想要一种更面向对象的编码风格,比如

soup := data.concat(nonce).concat([]byte(unixtimeStr)).concat(previousHash)

或至少类似

soup := concat(data, nonce, ...)

你会如何编写这段代码?

最佳答案

例如,

var data, nonce, previousHash []byte

unixtime := strconv.FormatInt(time.Now().Unix(), 10)
hasher := sha1.New()
hasher.Write(data)
hasher.Write(nonce)
hasher.Write([]byte(unixtime))
hasher.Write(previousHash)
hash := hasher.Sum(nil)

或者,

var data, nonce, previousHash []byte

unixtime := strconv.FormatInt(time.Now().Unix(), 10)
soup := make([]byte, 0, len(data)+len(nonce)+len(unixtime)+len(previousHash))
soup = append(soup, data...)
soup = append(soup, nonce...)
soup = append(soup, unixtime...)
soup = append(soup, previousHash...)
hasher := sha1.New()
hasher.Write(soup)
hash := hasher.Sum(nil)

注意:

unixtime := time.Now().Unix()
unixtimeStr := string(unixtime)

是荒谬的。它始终是 Unicode 替换字符。例如,

package main

import (
"fmt"
"time"
"unicode"
)

func main() {
unixtime := time.Now().Unix()
unixtimeStr := string(unixtime)
fmt.Println(unixtimeStr == string(unicode.ReplacementChar))
}

输出:

true

要将整数转换为字符串,请使用 strconv 包。例如,

package main

import (
"fmt"
"strconv"
"time"
)

func main() {
unixtimeStr := strconv.FormatInt(time.Now().Unix(), 10)
fmt.Println(unixtimeStr)
}

输出:

1257894000

关于go - 连接 []byte 和哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com