【发布时间】:2013-11-07 06:55:57
【问题描述】:
我想计算我的数据的校验和。将字符串转换为二进制后,我现在需要对所有 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.
}
【问题讨论】:
-
异或不能溢出。你确定你知道 XOR 是什么以及它与求和有何不同吗?
-
这听起来像是对 CRC 的部分描述,但如前所述,它开始没有意义。
-
是的,它是部分的,因为我不想要 CRC 检查只是一个简单的校验和..一旦我得到输出显示的所有 8 位集的总和然后 1s 补充它,它就会完成。我想要一个二进制求和(这里的 1 + 1 = 1 0 ... 1 0 中的 1 是进位位,直到它到达 MSB,一旦它到达,它就变成一个溢出位(iv 称为溢出位)并且它得到添加到总和(不包括最后一个进位/溢出位的总和值)\以获得最终总和值)。