我有一個特定大小的字節數組。我想抓住它的最後四個字節,並把它們放在一起,在變量中形成一個四字節的十六進制值。這樣我可以將一個四字節的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))));
所以你可以看到我在移動和「或」荷蘭國際集團我的數組的最後四個元素構成一個四個字節變量。 現在,我的問題是: 有沒有更快的方法來實現這一點,並減少所需的處理能力? 我也想提一下,我正在Arduino Uno上編譯此代碼。 任何幫助或提示是非常感謝。
所以爲了澄清,你們認爲可能創建一個循環來使用memcpy將4個CRC字節放在「whole_four」中,比移位和「或」字節更快嗎? – user3397830
我不知道它是否更快,但它很簡單,你可以試試看。編譯器通常會將memcpy與高度優化的特定於平臺的代碼「內聯」。在這種情況下,要在編譯時知道要複製的字節數,編譯器可以將其編譯爲單個加載/存儲。 – manlio