特定のサイズのバイト配列があります。最後の 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 でこのコードをコンパイルしていることにも言及したいと思います。どんな助けやヒントも大歓迎です。