1

だから私はCにchar配列を持っています...例えば:

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

私はそれに整数を追加する高速な方法(0x3445FFなど)を探しています。たとえば、arrに2を追加すると、次のようになります。

{ 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

多分ループ

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

十分に速いですか?

于 2013-01-07T14:53:27.277 に答える
1

これはCです。おそらくchar配列を整数配列にキャストして、次のように直接割り当てることができます。

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

ただし、サイズ、ロー/ビッグエンディアンなどは、プラットフォームでintがどの程度正確に表現されているかによって異なります。これにより、移植性の問題が発生する可能性があります。また、00からFFまでのすべての値が可能であることに注意してください。たとえば、後でnullターミネータを使用する場合、中央の00は問題を引き起こします。また、私のサンプルコードでは、整数表現はsizeOf(int)-整列されます。

于 2013-01-07T15:02:41.503 に答える