簡體   English   中英

將字符串轉換為uint16

[英]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根本不支持類型轉換,即使支持,也不是任何語言中類型轉換的示例。

但是對於您的實際問題,您有兩種選擇:

  1. 刪除“ 0x”前綴:

     c, err := strconv.ParseUint("0000", 16, 32) 
  2. 讓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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM