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 回答