在 C 中减去无符号字符数组的最有效方法

Most efficient way to subtract arrays of unsigned chars in C

我正在使用 libpcap 来分析和处理数据包。我必须比较两个无符号字符数组,取差并将其保存到哈希表中。另一个线程将定期扫描哈希表并计算平均值、标准差、最大值和最小值。

我的问题如下,对两个数组执行减法的最有效方法是什么?

例如:

A="0x34 0x44 0x59 0x5B"
B="0x34 0x42 0x43 0x43"

我的第一个想法是将其转换为整数,通过将数组转换为有符号字符的数组,做 take 需要一个函数来执行查找功能。因为系统收到每个数据包都会调用此函数。

使用union可以使这个变得简单,因为不同的数据类型共享相同的内存,我们可以使用这个功能来转换数据类型。

注意 Little-endian

#include <stdio.h>

typedef union new_array{
    struct array {
        unsigned char f4;
        unsigned char f3;
        unsigned char f2;
        unsigned char f1;
    }array;
    unsigned int int_array;
}new_array;

int main()
{
    new_array A, B;
    A.array.f1 = 0x34;
    A.array.f2 = 0x44;
    A.array.f3 = 0x59;
    A.array.f4 = 0x5B;

    B.array.f1 = 0x34;
    B.array.f2 = 0x42;
    B.array.f3 = 0x43;
    B.array.f4 = 0x43;

    printf("%u\n", A.int_array - B.int_array);
}