2

特定のサイズのバイト配列があります。最後の 4 バイトを取得し、それらを隣り合わせにして、変数で 4 バイトの 16 進数値を形成したいと思います。このようにして、4 バイトの CRC-32 値を変数と比較し、CRC 値が同じかどうかを確認できます。今、これは私が現時点でこれを行っている方法です:

static unsigned long whole_four = 0; // This variable holds the last four bytes of the  received bytes which are the CRC bytes

//Note that "MAX_INPUT" is the size of my array and "data" is just a pointer I have used as an argument to a function to point to the elements a buffer array.

whole_four = ((unsigned long)(*(data+(MAX_INPUT-4)))<< 24)  | ((unsigned long)(*(data+(MAX_INPUT-3)))<< 16) | ((unsigned long)(*(data+(MAX_INPUT-2)))<< 8) | ((unsigned long)(*(data+(MAX_INPUT-1))));

ご覧のとおり、配列の最後の 4 つの要素をシフトして "or" し、4 バイトの変数を作成しています。さて、私の質問は次のとおりです。これを達成し、必要な処理能力の量を減らすためのより速い方法はありますか? また、Arduino Uno でこのコードをコンパイルしていることにも言及したいと思います。どんな助けやヒントも大歓迎です。

4

2 に答える 2