0

次のコードを実行して、配列から 6 バイトの特定の値を読み出しています。よりエレガントにする方法はありますか?

temp_ts = (ptr[ts_offset]);
new_ts = temp_ts << 40;

temp_ts = (ptr[ts_offset + 1]);
new_ts |= temp_ts << 32;

temp_ts = (ptr[ts_offset + 2]);
new_ts |= temp_ts << 24;

temp_ts = (ptr[ts_offset + 3]);
new_ts |= temp_ts << 16;

temp_ts = (ptr[ts_offset + 4]);
new_ts |= temp_ts << 8;

temp_ts = (ptr[ts_offset + 5]);
new_ts |= temp_ts << 0;

注: コードは正常に動作しています。これはスタイルのみの問題です。

4

3 に答える 3

1

私はあなたの冗長が好き<< 0です; 再び対称性のために、次のものも追加し+ 0ました:

p = ptr;
o = ts_offset;
new_ts = (p[o + 0] << 40) | (p[o + 1] << 32) | (p[o + 2] << 24) |
         (p[o + 3] << 16) | (p[o + 4] <<  8) | (p[o + 5] <<  0);

または簡略化を追加します(他の人は見ませんでした):

unsigned char* p = ptr + ts_offset;
new_ts = (p[0] << 40) | (p[1] << 32) | (p[2] << 24) |
         (p[3] << 16) | (p[4] <<  8) | (p[5] <<  0);
于 2013-08-30T04:53:53.727 に答える
1

以下を試してください

int offset = 0;
int shift = 40;
while (offset <= 5) { 
  temp_ts = ptr[ts_offset + offset];
  new_ts |= temp_ts << shift;
  offset++;
  shift -= 8;
}
于 2013-08-30T04:31:47.160 に答える