1
我需要OPC服務器中的無符號16位整數值,但只能發送一個有符號的16位整數。我需要將這個有符號整數更改爲無符號數學,但我不確定如何。我的互聯網研究並沒有讓我走上正確的道路。有人可以給一些建議嗎?提前致謝。以數學方式將簽名轉換爲無符號整數
我需要OPC服務器中的無符號16位整數值,但只能發送一個有符號的16位整數。我需要將這個有符號整數更改爲無符號數學,但我不確定如何。我的互聯網研究並沒有讓我走上正確的道路。有人可以給一些建議嗎?提前致謝。以數學方式將簽名轉換爲無符號整數
在數學上,通過發送有符號整數的非負餘數除以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 = 0xFFFF
和1 + 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.
您使用什麼編程語言編寫的代碼? – StilesCrisis