1

このスニペット

unsigned char len_byte[4+1];
...
for(i=0; i < 4; i++) {
   printf("%02x ", len_byte[i]);
}

版画

8a 00 00 00

ここで、整数値を 168 (0x000000a8) に設定する必要があります。同じ人が私を助けることができますか?

みんなのおかげで、リカルド

編集、試しました:

uint32_t len_dec=0; 
len_dec += (uint32_t)len_byte[0] | ((uint32_t)len_byte[1]<<8) | ((uint32_t)len_byte[2]<<16) | ((uint32_t)len_byte[3]<<24); 
printf("%" PRIu32 "\n",len_dec);
--> 4522130
4

1 に答える 1

1

このコードでは、答えとして 168 を得ました:

int main(void) {
    unsigned char len_byte[4] = {0x8a,0,0,0};
    unsigned int len_dec = 0;
    int i;
    for(i = 3; i >= 0; --i)
    {
        len_dec |= ((len_byte[i] >> 4) << (8*i)) | ((len_byte[i] & 0xF) << ((8*i) + 4));
    }

    printf("%lu\n", len_dec);
    return 0;
}

ここでテスト済み

コツは、各バイトを 4 ビットでグループ化することです。138 = 2 進数で 10001010。4 ビットでグループ化すると、 と の 2 つのグループが1000あり1010ます。ここで、両方のグループを交換します。10101000これにより、168 が得られます。配列の最後の要素から始まる各バイトに対して、このアクションを実行します。

于 2013-11-11T22:04:41.853 に答える