0

シリアル ライン経由でデータを送信していますが、crc16 の計算を除いて、(コードではなく) bash スクリプトを介してほぼすべてを実行できます。コードではなくスクリプトですべてを実行できれば、構成が非常に簡単になります (特に現場で)。

私はコマンドで大丈夫ですが、トリッキーなものになるとすべての能力を失います.

だから私の質問は、誰かが私のためにこのCRC16を書き直すことができますか?

これはウィキペディアから取得したアルゴリズムであり、コード内のアルゴリズムです。

uint16_t Encoder::checksum(std::string thestring)
{
    uint8_t d, e, f;
    uint16_t c, r, crccalc;
    c = 0xffff;

    for (unsigned int i = 0; i < thestring.length(); i++)
    {
        d = thestring[i];
        e = c ^ d;
        f = e ^ (e << 4);
        r = (c >> 8) ^ (f << 8) ^ (f << 3) ^ (f >> 4);
        c = r;
    }
    c ^= 0xffff;
    crccalc = c;
    return crccalc;
}

C++ コードから簡単に実行可能ファイルを作成し、それを stdin にフィードするだけですが、これを bash 内に含めることができれば本当に便利だと思います。

私が知らないもう1つのことは、変数のサイズが正しいことを確認する方法です。どうすれば 16 ビット整数を確実に取得できますか?

どんな助けでも素晴らしいでしょう。オンラインで小さなスクリプトを見つけましたが、信用できませんでした。ここで答えられて本当に良かったと思いました。

4

1 に答える 1