1

データのチェックサムを計算したい。文字列をバイナリに変換した後、XOR が合計の最後にオーバーフロー ビット (キャリー ビット) を生成する場合、そのビットを最終的に追加する必要があるように、8 ビット文字列 (XOR それら) のすべてを合計する必要があります。 sum であり、現在取得されている値が FINAL 値 (8 ビットのチェックサム) です。

次に、8 ビットの FINAL 値の 1 の補数を取りたいと思います。この新しい値は、先に使用できる実際のチェックサムになります。これらのバイナリ文字列のそれぞれを取り上げて、最初にそれらを合計する方法がわかりません:(

#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) を一緒に XOR すると、常に 0 から 255 の間の結果が得られることに注意してください。この関数は、入力パラメーターとして渡した文字列の各バイトを一緒に XOR し、結果を返します。このアルゴリズムは、LRC (Longitudinal Redundancy Check) とも呼ばれます。

これがあなたが望んでいたことを願っています。

于 2013-11-05T21:51:09.000 に答える