2 回答

TA貢獻(xiàn)1772條經(jīng)驗 獲得超6個贊
行為strconv.ParseUint()
詳見strconv.ParseInt()
:
如果 base == 0,則基數(shù)由字符串的前綴隱含:基數(shù) 16 代表“0x”,基數(shù) 8 代表“0”,否則基數(shù) 10。對于基數(shù) 1、低于 0 或高于 36,將返回錯誤。
所以只需使用base = 0
, 然后0x
前綴就會被正確解釋。
例如:
c, err := strconv.ParseUint("0x0000", 0, 16)
fmt.Println(c, err)
c, err = strconv.ParseUint("0x0100", 0, 16)
fmt.Println(c, err)
輸出(在Go Playground上嘗試):
0?<nil> 256?<nil>
另一種選擇是使用fmt.Sscanf()
:
var?c?uint16 _,?err?:=?fmt.Sscanf("0x0000",?"0x%04x",?&c) fmt.Println(c,?err) _,?err?=?fmt.Sscanf("0x0100",?"0x%04x",?&c) fmt.Println(c,?err)
輸出是一樣的。在Go Playground上嘗試一下。

TA貢獻(xiàn)1796條經(jīng)驗 獲得超10個贊
首先,您正在做的是轉(zhuǎn)換,而不是類型轉(zhuǎn)換。Go 根本不支持類型轉(zhuǎn)換,即使支持,這也不是任何語言中類型轉(zhuǎn)換的例子。
但是對于您的實際問題,您有兩種選擇:
刪除“0x”前綴:
c,?err?:=?strconv.ParseUint("0000",?16,?32)
讓 strconv 檢測帶有前綴的堿基,如記錄的那樣:
如果 base == 0,則基數(shù)由字符串的前綴隱含:基數(shù) 16 代表“0x”,基數(shù) 8 代表“0”,否則基數(shù) 10。對于基數(shù) 1、低于 0 或高于 36,將返回錯誤。
c,?err?:=?strconv.ParseUint("0x0000",?0,?32)
最后,如果您的目標(biāo)是轉(zhuǎn)換為 a?uint16
,您可能應(yīng)該通過請求適當(dāng)?shù)奈淮笮砀嬖V ParseUint:
c,?err?:=?strconv.ParseUint("0x0000",?0,?16)
- 2 回答
- 0 關(guān)注
- 282 瀏覽
添加回答
舉報