亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

連接 []byte 和哈希

連接 []byte 和哈希

Go
一只甜甜圈 2023-06-05 18:05:54
我有類似的東西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)data, nonce,previousHash屬于 類型[]byte。我覺得它很臟而且不可讀!我想要一種更面向對象的編碼風格,比如soup := data.concat(nonce).concat([]byte(unixtimeStr)).concat(previousHash)或者至少是類似的東西soup := concat(data, nonce, ...)你會如何寫這個片段?
查看完整描述

2 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

例如,


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


查看完整回答
反對 回復 2023-06-05
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

我應該指出這hash.Hash是一個io.Writer所以你可以將它作為第一個參數傳遞給fmt.Fprintf(...)-- 并且,由于字節切片的動詞fmt正確的%s,你可以通過以下方式使其更具可讀性:

h?:=?sha1.New()
fmt.Fprintf(h,?"%s%s%d%s",?data,?nonce,?time.Now().Unix(),?prev)

...并且,它也為您處理整數轉換(使用%d


注意:fmt.Fprintf(...)不是很快;如果性能很重要,你應該找到另一種方法來做到這一點。性能和可讀性通常是一個微妙的平衡。


查看完整回答
反對 回復 2023-06-05
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號