如何在C ++中对二进制字符串求和/ XOR?

时间:2013-11-05 21:29:33

标签: c++ binary

我想计算数据的校验和。在将字符串转换为二进制后,我现在需要对所有8位字符串求和(对它们进行异或),这样,如果XOR在和的末尾产生溢出位(进位),那么该位应该加到最后sum和现在获得的值是FINAL值(8位校验和)。

然后我想取8位FINAL值的1s补码,这个新值将是我可以提前使用的实际校验和。我不知道如何处理这些二进制字符串中的每一个并将它们加在一起:(

#include <string>
#include <bitset>
#include <iostream>
using namespace std;
int main()
{
    string myString = "Hello World";
    for (std::size_t i = 0; i < myString.size(); ++i)
{
       cout << bitset<8>(myString.c_str()[i]) << endl;
}


//the indentations might have shaken a bit in copting the code here. 

}

1 个答案:

答案 0 :(得分:0)

如果我很好地理解了这个问题,你可以编写这样的函数:

unsigned char checkSum(const string &str) {
    unsigned char answer = 0;
    for (size_t i = 0; i < myString.size(); ++i)
    {   // XOR each byte of the string and stores the result in answer.
        answer ^= str[i];
    }

    return answer;
}

用法:

unsigned char my_checksum = checkSum("Hello World");

请注意,如果同时对无符号字符(0到255)进行XOR运算,则总会得到0到25​​5之间的结果。该函数将作为输入参数传递的字符串的每个字节进行异或,并返回结果。该算法也称为LRC(纵向冗余校验)。

希望这是你想要的。