C 向字符数组添加int

C 向字符数组添加int,c,arrays,char,int,C,Arrays,Char,Int,我在C中有一个字符数组…例如: uchar arr[3] = { 0x34, 0x45, 0xFF } 我正在寻找一种快速的方法,向其中添加一个整数,如0x3445FF,因此,例如,如果我向arr添加2,我会得到: { 0x34, 0x46, 0x01 } 也许是环路 int index = last_valid_index; while(index >= 0 && addend > 0) { addend += array[index]; arr

我在C中有一个字符数组…例如:

uchar arr[3] = { 0x34, 0x45, 0xFF }
我正在寻找一种快速的方法,向其中添加一个整数,如0x3445FF,因此,例如,如果我向arr添加2,我会得到:

{ 0x34, 0x46, 0x01 }
也许是环路

int index = last_valid_index;
while(index >= 0 && addend > 0) {
    addend += array[index];
    array[index] = addend;
    addend >>= 8;
    --index;
}
够快吗?

可能是环路

int index = last_valid_index;
while(index >= 0 && addend > 0) {
    addend += array[index];
    array[index] = addend;
    addend >>= 8;
    --index;
}

足够快吗?

最简单、最好的方法是转换为int、add,然后再转换回int。此外,您还需要决定字节顺序,因为它永远不清楚

此代码采用big-endian,即数组最初包含数字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;

最简单也是最好的方法是转换为int、add,然后再转换回int。此外,您还需要决定字节顺序,因为它永远不清楚

此代码采用big-endian,即数组最初包含数字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;

这是C。您可能可以将char数组强制转换为整数数组并直接赋值,如

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

但是,大小、低位/高位等将取决于int在平台上的表示方式。这可能会导致可移植性问题。此外,请注意,从00到FF的所有值都是可能的。例如,如果稍后使用null终止符,中间的00将为您创建一个问题。另外,在我的示例代码中,整数表示将与sizeOfint对齐。

这是C。您可能可以将字符数组强制转换为整数数组并直接赋值,如

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

但是,大小、低位/高位等将取决于int在平台上的表示方式。这可能会导致可移植性问题。此外,请注意,从00到FF的所有值都是可能的。例如,如果稍后使用null终止符,中间的00将为您创建一个问题。另外,在我的示例代码中,整数表示将与sizeOfint对齐。

手动将初始数组转换为int,add,convert back。数组的长度是否有特定的范围?我认为,可能会进行一些邪恶的位级黑客攻击。还有你的CPU类型?@pmg小心endianness。我在OpenCL内核中这样做。手动将初始数组转换为int,add,convert back。数组的长度是否有特定的范围?我认为,可能会进行一些邪恶的位级黑客攻击。还有你的CPU类型?@pmg小心endianness。我是在OpenCL内核中这样做的。所需的字节顺序在问题中是隐式的,就像这里的一样。无论自然字节顺序执行平台如何,代码都将正常工作。我假设这是与点平台无关的字节顺序?所需的字节顺序在问题中是隐含的,正如您在这里看到的那样。无论自然字节顺序执行平台如何,代码都将正常工作。我假设这是与点平台无关的字节排序?我回家后会尝试一下……我是在OpenCLC内核中做这件事的,所以可移植性不应该是个问题!我回家后会试试这个…我是在OpenCLC内核中做的,所以可移植性不应该是个问题!