1

重複の可能性:
C++ で 32 ビット数をバイトに分割する最速の方法

uint を現在行っている方法よりも速く 4 バイトにマージ/分割する方法はありますか? たぶん、単一の命令でそれを実行できるネイティブオペコードを持つインラインアセンブラでしょうか?

// merge into x0
unsigned int x0 = (data[i] << 24) | (data[i+1] << 16) | (data[i+2] << 8) | data[i+3]; 


// split x0
outputBuffer[i] = (x0 >> 24);
outputBuffer[i+1]  = (x0 >> 16) & 0xFF;
outputBuffer[i+2]  = (x0 >> 8) & 0xFF;
outputBuffer[i+3]  = (x0) & 0xFF;
4

1 に答える 1

0

それらを char に直接書き込むことができます。シフトは必要ありません (ただし、生成されたアセンブリでこれが何をするかはわかりませんが、gcc -S役立つかもしれません)。

  unsigned int i = 0x12345678;

  char LSB = *((char*)&i);
  char MSB = *((char*)&i+3);
于 2012-10-25T07:14:24.047 に答える