我有一个特定大小的字节数组。我想抓住它的最后四个字节,并把它们放在一起,在变量中形成一个四字节的十六进制值。这样我可以将一个四字节的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