私たちはシリアル回線でデータを送信していますが、crc16計算を除いて、(コードの代わりに)bashスクリプトを使ってすべてを行うことができます。もし私がスクリプトとコードの両方でそれをすべて行うことができれば、(特にフィールドの中で)heckofalotの設定が簡単になります。CPPからbashへのCRC16アルゴリズム?
私はコマンドで大丈夫ですが、トリッキーなものになるとすべての能力を失います。
私の質問は誰かが私のためにこのCRC16の書き換えを行うことができますが、bashの中でですか?ここ
はウィキペディアからつかんアルゴリズムであり、そしてそれは我々のコードの1です:
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++コードのうち、実行可能ファイルを作成し、ちょうど標準入力、それを養うが、私はそれを考えることができますこれをbashの中に持つことができるのは本当にきれいです。
私が知りませんが、私の可変サイズが正しいことを確認する方法です。どのように私は16ビット整数を取得していることを確認できますか?
助けがあれば助かります。私は少しスクリプトをオンラインで見つけましたが、私はそれを信用しませんでした。ここで答えたのは本当にクールだろうと思った。
ねえ、ありがとう。私は、bashにはこれらの演算子がたくさんあることは知っていますが、変数のサイズを維持することについてはわかりません。それのためにawkを使ったことはなかったでしょう。 – jasonmclose
私は先に進んで、C++コードを使用する小さなプログラムを作成し、標準のinから文字列を読み込み、crcを与えます。その後、私はbashの部分に試行を与えます。 (bash関数の出力がC++コードと一致するかどうかに基づいて) – jasonmclose
awkを使うつもりなら、gawk(通常はlinuxで手に入るもの)にはleft-右シフト、xorなど**名前付き演算子**(彼らはfuctionsのように見えます)http://www.gnu.org/s/gawk/manual/gawk.html#index-left-shift_002c-bitwise-1459を参照してください。 。ちょうどそれをすべてgawkでやってください!がんばろう。 – shellter