所以我在 C 中有一个 char 数组...例如:
uchar arr[3] = { 0x34, 0x45, 0xFF }
我正在寻找一种向其添加整数的快速方法(例如它的 0x3445FF),例如,如果我将 2 添加到 arr 我得到:
{ 0x34, 0x46, 0x01 }
最简单和最好的方法是转换为 int,添加,然后再转换回来。此外,您需要确定字节顺序,因为它永远不清楚。
这段代码假定大端,即数组最初保存数字 0x3445ff:
uint8_t arr[] = { 0x34, 0x45, 0xff };
uint32_t x = (arr[0] << 16) | (arr[1] << 8] | arr[2];
x += 2;
arr[0] = (x >> 16) & 0xff;
arr[1] = (x >> 8) & 0xff;
arr[2] = x & 0xff;
Maybe the loop
int index = last_valid_index;
while(index >= 0 && addend > 0) {
addend += array[index];
array[index] = addend;
addend >>= 8;
--index;
}
is fast enough?
这是 C。您可以将 char 数组转换为整数数组并直接分配,例如
uchar arr[20];
((int *)arr + index/sizeOf(int)) = your_int;
然而,大小、低/大端等将取决于 int 在您的平台上的精确表示方式。这可能会导致可移植性问题。另外,请注意从 00 到 FF 的所有值都是可能的。例如,如果您稍后使用空终止符,中间的 00 会给您带来问题。此外,在我的示例代码中,整数表示将 sizeOf(int) - 对齐。