2015-02-09 33 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,它保证有上溢和下溢的模数运算。

如果您需要处理签名超过/不足流量,您将不得不仔细编码所有您想要的逻辑。