2 回答

TA貢獻1772條經驗 獲得超6個贊
行為strconv.ParseUint()
詳見strconv.ParseInt()
:
如果 base == 0,則基數由字符串的前綴隱含:基數 16 代表“0x”,基數 8 代表“0”,否則基數 10。對于基數 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貢獻1796條經驗 獲得超10個贊
首先,您正在做的是轉換,而不是類型轉換。Go 根本不支持類型轉換,即使支持,這也不是任何語言中類型轉換的例子。
但是對于您的實際問題,您有兩種選擇:
刪除“0x”前綴:
c,?err?:=?strconv.ParseUint("0000",?16,?32)
讓 strconv 檢測帶有前綴的堿基,如記錄的那樣:
如果 base == 0,則基數由字符串的前綴隱含:基數 16 代表“0x”,基數 8 代表“0”,否則基數 10。對于基數 1、低于 0 或高于 36,將返回錯誤。
c,?err?:=?strconv.ParseUint("0x0000",?0,?32)
最后,如果您的目標是轉換為 a?uint16
,您可能應該通過請求適當的位大小來告訴 ParseUint:
c,?err?:=?strconv.ParseUint("0x0000",?0,?16)
- 2 回答
- 0 關注
- 285 瀏覽
添加回答
舉報