我想计算数据的校验和。在将字符串转换为二进制后,我现在需要对所有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.
}
答案 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到255之间的结果。该函数将作为输入参数传递的字符串的每个字节进行异或,并返回结果。该算法也称为LRC(纵向冗余校验)。
希望这是你想要的。