[英]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
。
查看可能的重復項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.