我在C中有一个字符数组,我希望通过翻转一些位来引入错误。
如何翻转位并引入错误?
答案 0 :(得分:2)
您可以使用xor运算符翻转位:
x = x ^ mask;
x ^= mask; // Same functionality as above.
例如,如果mask
为1
,则翻转最低有效位。您可以通过对1:mask = 1 << k;
进行位移来创建任何所需的掩码,其中k
是要移位的位数。
答案 1 :(得分:1)
要分发错误,请使用随机数生成器。如果出于测试目的,rand()
/ srand()
就足够了。
要翻转一下,您可以使用位移位和按位xor运算符。
unsigned char flip(unsigned char c, int bit) {
return c ^ (1 << bit);
}
您还可以使用除(1 << bit)
以外的位掩码来翻转多个位,该位掩码只有一位:
unsigned char flip(unsigned char c, unsigned char mask) {
return c ^ (1 << mask);
}
// flip bits 0 and 3 (00001001 = 0x09)
flip(c, 0x09);