【发布时间】:2015-06-05 09:42:18
【问题描述】:
我正在尝试使用以下代码计算字符串中的奇偶校验位,我首先计算字符串的 parityByte,然后计算 该字节的奇偶校验位,来自我收集的这些函数 应该做的伎俩,但我现在不太确定,我使用它们的程序失败了,如果是因为这些,或者我应该看看其他地方,我想现在。
char calculateParity(char *payload, int size){
char r = 0;
int i;
for(i = 0; i < size; i++){
r ^= payload[i];
}
return calcParityBit(r);
}
char calcParityBit(char x){
x ^= x >> 8;
x ^= x >> 4;
x ^= x >> 2;
x ^= x >> 1;
return x & 1;
}
【问题讨论】:
-
使用
unsigned char,而不是char。如果您右移(有符号的)char,则符号位将被保留。这会破坏您的奇偶校验计算。此外,x ^= x >> 8;行是不必要的;x只有 8 位。 -
你能举一个输入失败的例子吗?我在这里没有发现任何问题(即使
char是有符号且为负的,那无用的x ^= x >> 8步骤也无济于事——翻转所有位不会改变奇偶性)
标签: c bitwise-operators parity