1

所以我在 C 中有一个 char 数组...例如:

uchar arr[3] = { 0x34, 0x45, 0xFF }

我正在寻找一种向其添加整数的快速方法(例如它的 0x3445FF),例如,如果我将 2 添加到 arr 我得到:

{ 0x34, 0x46, 0x01 }
4

3 回答 3

3

最简单和最好的方法是转换为 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;
于 2013-01-07T14:55:37.490 回答
2

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?

于 2013-01-07T14:53:27.277 回答
1

这是 C。您可以将 char 数组转换为整数数组并直接分配,例如

uchar arr[20];
((int *)arr + index/sizeOf(int)) = your_int;

然而,大小、低/大端等将取决于 int 在您的平台上的精确表示方式。这可能会导致可移植性问题。另外,请注意从 00 到 FF 的所有值都是可能的。例如,如果您稍后使用空终止符,中间的 00 会给您带来问题。此外,在我的示例代码中,整数表示将 sizeOf(int) - 对齐。

于 2013-01-07T15:02:41.503 回答