2015-04-23 93 views
1

我需要OPC服務器中的無符號16位整數值,但只能發送一個有符號的16位整數。我需要將這個有符號整數更改爲無符號數學,但我不確定如何。我的互聯網研究並沒有讓我走上正確的道路。有人可以給一些建議嗎?提前致謝。以數學方式將簽名轉換爲無符號整數

+0

您使用什麼編程語言編寫的代碼? – StilesCrisis

回答

1

在數學上,通過發送有符號整數的非負餘數除以1 + max來完成從有符號到無符號的轉換,其中max是您可以使用可用位數寫入的最大整數,16表示您的情況。

這種邏輯適用於有符號整數s如下:

if s >= 0 then return s else return 1 + max + s 

對於本公約的工作如預期簽署s必須滿足

- (1 + max)/2 <= s < (1 + max)/2 

在你的情況,因爲你有16位,我們有max = 0xFFFF1 + max = 0x10000 = 65536.

還要注意,如果你編寫一個負inte ger按照這個約定,結果將具有最高位,即等於1.這樣,最高位就成爲一個標誌,表明該數字是否爲正數。

例子:

2 -> 2 
1 -> 1 
0 -> 0 
-1 -> 0xFFFF 
-2 -> 0xFFFE 
-3 -> 0xFFFD 
... 
-15 -> 0xFFF1 
... 
-32768 -> 0x8000 = 32768 (!) 
-32769 -> error: cannot codify using only 16 bits. 
相關問題