[英]Casting string to uint16
我是新手,我一直在嘗試將字符串“ 0x0000”轉換為十六進制,到目前為止沒有任何運氣。 這是我嘗試過的:
import "strconv"
c, err := strconv.ParseUint("0x0000", 16, 32)
if err != nil {
return err, nil
}
引發錯誤: strconv.ParseUint: parsing "0x0000": invalid syntax
。
我也嘗試過uint16("0x0000")
但顯然我也無法將字符串直接轉換為uint16
。 我敢肯定這是微不足道的,所以任何幫助將不勝感激。 謝謝。
的行為strconv.ParseUint()
在詳述strconv.ParseInt()
如果base == 0,則字符串的前綴隱含基數:“ 0x”的基數為16,“ 0”的基數為8,否則為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上嘗試一下。
另請參閱相關問題: 在Go中將字符串轉換為整數類型?
首先,您要做的是轉換,而不是類型轉換。 Go根本不支持類型轉換,即使支持,也不是任何語言中類型轉換的示例。
但是對於您的實際問題,您有兩種選擇:
刪除“ 0x”前綴:
c, err := strconv.ParseUint("0000", 16, 32)
讓strconv檢測帶有前綴的基數,如記錄所示 :
如果base == 0,則字符串的前綴隱含基數:“ 0x”的基數為16,“ 0”的基數為8,否則為10。 對於基數1,小於0或大於36的錯誤將返回。
c, err := strconv.ParseUint("0x0000", 0, 32)
最后,如果您的目標是轉換為uint16
,則可能應該通過請求適當的位大小來告訴ParseUint:
c, err := strconv.ParseUint("0x0000", 0, 16)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.