考虑到溢出和下溢,在c ++中递增/递减字节的最佳方法是什么?例如,我有:
char c = random byte;
c += 0xB;
如果c&lt; = 0xF4,这将运行良好,但任何高于此值的值都会导致溢出。同样,如果它是c - = 0xB;和c < 0xB,会发生下溢。
假设c = 0xFF,加法后,它会是0xA吗?与下溢类似,如果c = 0,结果是否为0xF5?
另外,由于一些奇怪的原因,当我增加具体数字时,会出现奇怪的结果。例如,如果我将0x0增加0xA,则使用代码:
c = (c + 0xA) & 0xFF;
结果是:0x0D 0x0A而不仅仅是0x0A ......如下图所示:
所有其余字节都正确增加。
答案 0 :(得分:1)
我至少可以使用0x0 by 0xA
来解释您的结果:在Windows上,文本文件中的换行符通常表示为\r\n
而不是\n
,文件I / O函数将有用为你翻译。在这种情况下,您不希望转换,因此您可以在二进制模式下打开文件,这将禁止自动转换。
至于处理溢出,如果您能够使用unsigned char
而不是char
,则可以保证对溢出和下溢有明确定义的模运算。
如果您需要处理已签名的上下流,您将需要仔细编写所需的所有逻辑。