在 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
可以使这个变得简单,因为不同的数据类型共享相同的内存,我们可以使用这个功能来转换数据类型。
#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);
}
我正在使用 libpcap 来分析和处理数据包。我必须比较两个无符号字符数组,取差并将其保存到哈希表中。另一个线程将定期扫描哈希表并计算平均值、标准差、最大值和最小值。
我的问题如下,对两个数组执行减法的最有效方法是什么?
例如:
A="0x34 0x44 0x59 0x5B"
B="0x34 0x42 0x43 0x43"
我的第一个想法是将其转换为整数,通过将数组转换为有符号字符的数组,做 take 需要一个函数来执行查找功能。因为系统收到每个数据包都会调用此函数。
使用union
可以使这个变得简单,因为不同的数据类型共享相同的内存,我们可以使用这个功能来转换数据类型。
#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);
}