假设我有一个包含4个32位整数值的__m128i

有什么方法可以将其存储在char[4]中,其中每个int值中的低位字符都存储在char值中?

所需结果:

           r1          r2          r3          r4
__m128i    0x00000012  0x00000034  0x00000056  0x00000078

  |
  V

char[4]    0x12        0x34        0x56        0x78

SSE2及以下版本是首选。
在MSVC++上编译。

最佳答案

使用SSE2,您可以使用以下代码:

char[4] array;
x = _mm_packs_epi32(x, x);
x = _mm_packus_epi16(x, x);
*((int*)array) = _mm_cvtsi128_si32(x);

07-27 13:20
查看更多