2015-02-09 37 views
-2

在考慮上溢和下溢的同時在C++中遞增/遞減字節的最佳方法是什麼?例如,我有:在C++中增加/減少字節(字符)與上溢/下溢

char c = random byte; 
c += 0xB; 

在情況c < = 0xF4中,這將很好地工作,但上述的任何值將導致溢出。同樣,如果它是c - = 0xB;並且0xB,則會發生下溢。

比方說c = 0xFF,加法之後,它會是0xA嗎?同樣在下溢時,如果c = 0,結果是0xF5嗎?

此外,對於一些奇怪的原因,當我增加特定數字時,會出現奇怪的結果。例如,如果我通過增加的0xA爲0x0,使用的代碼:

c = (c + 0xA) & 0xFF; 

結果是:0X0D的0x0A而不是僅僅的0x0A ...只是,如下圖所示: Increment Issue

雖然所有其餘的字節正確增加。

+0

我不能發現一個單一的增量或減量操作。 – 2015-02-09 16:51:53

+0

我不確定我是否使用了正確的詞來描述操作,因爲我不是母語的人,但這就是我的意思,增量:c =(c + 0xA)。我也編輯了代碼,因爲我忘了適當地更改代碼中使用的變量。 @πάνταῥεῖ – 2015-02-09 16:52:49

+0

你是否試圖使用它來進行加密?也許你想用[exclusive或](http://en.wikipedia.org/wiki/XOR_cipher)代替。 – 2015-02-09 16:54:43

回答

1

我至少可以用0x0 by 0xA解釋你的結果:在Windows上,文本文件中的換行符通常表示爲\r\n而不是\n,文件I/O函數將幫助您爲此翻譯。在這種情況下,您不希望進行轉換,所以您可以用二進制模式打開文件,這會禁止自動轉換。

至於處理溢出,如果您能夠使用unsigned char而不是char,它保證有上溢和下溢的模數運算。

如果您需要處理簽名超過/不足流量,您將不得不仔細編碼所有您想要的邏輯。