C ++:将uint合并并拆分为4个字节的最快方法

时间:2012-10-25 07:04:53

标签: c++ performance visual-c++ binary byte

  

可能重复:
  Fastest Method to Split a 32 Bit number into Bytes in C++

有没有办法将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;

1 个答案:

答案 0 :(得分:0)

你可以将它们直接写入char,不需要转换(不知道这对生成的程序集有什么作用,但gcc -S可能对你有帮助):

  unsigned int i = 0x12345678;

  char LSB = *((char*)&i);
  char MSB = *((char*)&i+3);