1

我想计算我的数据的校验和。将字符串转换为二进制后,我现在需要对所有 8 位字符串求和(对它们进行异或),这样,如果异或在求和结束时产生溢出位(进位位),则应将该位添加到最后总和,现在获得的值是最终值(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. 

}

4

1 回答 1

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");

请注意,如果将 unsigned char (0 到 255) 一起异或,您将始终得到 0 到 255 之间的结果。函数将作为输入参数传递的字符串的每个字节一起异或并返回结果。该算法也称为 LRC(纵向冗余校验)。

希望这是你想要的。

于 2013-11-05T21:51:09.000 回答