Golang數據類型轉換----16進制轉整數,解析8位有符號16進制整數

s := "CB"

n, err := strconv.ParseUint(s, 16, 8)
if err != nil {
    panic(""Parse Error"")
}
n2 := uint8(n)
f := int(*(*int8)(unsafe.Pointer(&n2)))
fmt.Println(f)

這是個16進制字符串轉無符號8位整數後再轉成有符號的8位整數的過程, 之所以這麼轉是因爲直接ParseInt(s, 16, 8)會拋出異常, 因爲默認的strconv的ParseInt貌似不支持負數和浮點數的解析, 所以先將其轉成uint64, 然後強轉成uint8, 這樣不會損失精度, 同時將其轉成一個int8的指針, 然後取指針值, 這點很重要, 千萬不能寫int, 因爲int內部至少有4個字節, 按照指針尋址會造成野指針, 讀取出來的值是錯誤的。
類似的浮點數的16進制轉浮點數據也可以用這種方式去轉換, 先轉成uint32, 然後利用指針進行尋址...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章