2 回答

TA貢獻1783條經驗 獲得超4個贊
以下代碼將值作為四字節大端數字寫入文件。
str := fmt.Sprintf("%08x", 1662489944)
b, _ := hex.DecodeString(str)
file.Write(b)
使用此代碼來反轉轉換:
b = make([]byte, 4)
io.ReadFull(file, b)
n := int(binary.BigEndian.Uint32(b))
游樂場示例。
這是將數字作為四字節大端數字寫入文件的更直接的方法。
b := make([]byte, 4)
binary.BigEndian.PutUint32(b, 1662489944)
file.Write(b)

TA貢獻1735條經驗 獲得超5個贊
目前還不太清楚,您的實際十六進制字符串是如何寫入文件并讀回的。但根據你的評論,
當我在文件上運行 hexdump 時,它顯示63 17 95 58
這很明顯,您應該處理的字節切片應該是十六進制表示法而不是十進制,即或[]byte{0x63, 0x17, 0x95, 0x58}十進制字節切片[]byte{99, 23, 149, 88},但絕對不是 OP 中發布的那個。這可以通過包中的幾種方法來確認hex,這些方法將十六進制字符串編碼為字節,反之亦然,
package main
import (
"encoding/hex"
"fmt"
"log"
)
func main() {
const s = "63179558"
decoded, err := hex.DecodeString(s)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%v\n", decoded)
fmt.Printf("%s\n", hex.EncodeToString([]byte{0x63, 0x17, 0x95, 0x58}))
}
產生
[99 23 149 88]
63179558
證實了我的上述假設。
至于將十六進制字節片轉換回基數 10 的原始問題,您可以使用編碼/二進制包的ByteOrder實現,轉換為 32 位、64 位數字。所以很簡單
binary.BigEndian.Uint32([]byte{0x63, 0x17, 0x95, 0x58})
- 2 回答
- 0 關注
- 162 瀏覽
添加回答
舉報