簡體   English   中英

在Go中將uint16強制轉換為int16的正確方法

[英]Proper way for casting uint16 to int16 in Go

按位操作和Go新手在這里:DI正在使用Go從傳感器讀取一些數據,我將其獲取為2個字節-假設0xFFFE 也很容易將其強制轉換為uint16,因為在Go中我們可以執行uint16(0xFFFE)但我需要將其轉換為整數,因為傳感器返回的值實際上是-32768到32767。現在,我想“也許Go會很不錯,如果我執行int16(0xFFFE) ,它將明白我想要什么嗎?” , 但不是。 我最終使用了以下解決方案(我從網絡上翻譯了一些python代碼):

x := 0xFFFE

if (x & (1 << 15)) != 0 {
    x = x - (1<<16)
}

它似乎可行,但是A)我不確定為什么,B)我認為應該是將uint16轉換為int16的簡單解決方案,這看起來有點難看。 誰能幫我一下,弄清楚為什么這是唯一的方法? 還是還有其他可能的方法?

但是您想要的是,“ Go很好”:

ui := uint16(0xFFFE)
fmt.Println(ui)
i := int16(ui)
fmt.Println(i)

輸出(在Go Playground上嘗試):

65534
-2

int16(0xFFFE)不起作用,因為0xfffe是無類型整數常數不能由類型的值來表示int16 ,這就是為什么該編譯器會抱怨。 但是您當然可以將任何uint16非恆定值轉換為int16

查看可能的重復項:

Golang:故意int溢出

對於常量表達式和其他表達式,去編譯器的評估是否有所不同

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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