1 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
您會(huì)得到很多前導(dǎo)ff
,因?yàn)槟?code>a數(shù)字實(shí)際上只是 32 位“大”,但在 64 位uint64
值“內(nèi)”使用。(您正在處理具有 8 個(gè)十六進(jìn)制數(shù)字 = 4 個(gè)字節(jié)數(shù)據(jù) = 32 位的數(shù)字。)它有 4 個(gè)前導(dǎo) 0 字節(jié),當(dāng)取反時(shí)將變成ff
.?您可以通過以下方式驗(yàn)證這一點(diǎn):
fmt.Printf("a?%#x\n",a)
輸出:
a?0x38382434
要去掉那些前導(dǎo)ff
,請(qǐng)將結(jié)果轉(zhuǎn)換為uint32
:
xh?:=?strconv.FormatUint(uint64(uint32(^a)),?16) fmt.Println(xh)
(轉(zhuǎn)換回uint64
是因?yàn)?code>strconv.FormatUint()期望/需要uint64
。)
這輸出:
c7c7dbcb
另一種選擇是應(yīng)用位0xffffffff
掩碼:
xh?=?strconv.FormatUint(^a&0xffffffff,?16) fmt.Println(xh)
另請(qǐng)注意,您可以使用fmt.Printf()
(或者fmt.Sprintf()
如果您需要它作為 a?string
)打印它,其中您指定%08x
動(dòng)詞,如果輸入具有超過 3 個(gè)前導(dǎo) 0 位,該動(dòng)詞也會(huì)添加前導(dǎo)零(因此strconv.FormatUint()
不會(huì)添加前導(dǎo)十六進(jìn)制零):
fmt.Printf("%08x",?uint32(^a))
這輸出相同。嘗試Go Playground上的示例。
- 1 回答
- 0 關(guān)注
- 195 瀏覽
添加回答
舉報(bào)