2012-02-22 38 views
0

是否有任何优雅的方式来加载16个8位数据并将它们连接到4个unsigned int?如何加载16个8位数据并将它们连接到4个unsigned int?

喜欢如下:

负载以下阵列(16 epi8)由_mm_load_si128()到__m128i

0x00时,0×11,为0x22,0x33,0x44进行,0x55​​的,0x66,0x77,均为0x88,0x99,和0xAA,为0xBB,的0xCC,0xdd,0xee,0xff的

,然后做一些操作,使得寄存器(__ m128i)变为4 epi32,

0x33221100,0x77665544,0xbbaa8899,0xffeeddcc

谢谢!

+0

如何内存中的数据布局? – 2012-02-22 16:32:16

+0

同时出现的问题似乎暗示这16个字节不是按顺序打包的,而是它们。这是什么? – harold 2012-02-22 16:33:40

+1

这是我如何解释你的问题:你有这些字节存储在内存中,第一个字节为0x00,第二个字节为0x11,依此类推。你现在希望它们存储为32位小端数字(原始配置将是大端)。只需交换位置0和3,位置1和2,位置4和7,位置5和6,等等。你需要一个例子列表? – 2012-02-22 16:40:26

回答

1

是:什么都不做。加载后,寄存器已经处于你想要的状态。 (假设0xbbaa8899是一个错字,而且实际上您的意思是0xbbaa9988,无论如何)。

+0

对不起,我想我还没有弄清楚。我的意思是将4个字节并行粘贴到1个int中。 – prgbenz 2012-02-22 18:50:21

+0

@prgbenz:对。你不需要做任何事情。所有正确的信息已经在正确的地方;你只需要把它解释为4个32位整数(这需要你的观点有所变化,但是没有改变数据,因此也没有实际的操作)。 – 2012-02-22 19:32:13

+0

我可以证实。这是little endian的一个优点。 – hirschhornsalz 2012-02-22 22:55:41

0

只需创建4个int指针并将您的m128存储在这些指针所针对的顺序存储器中。

或者有一个int [4]数组并将您的m128存储到数组所在的内存中,那么array [0..3]就是您的4个整数。

或者,如果你已经拥有了16字节数组只投内存为整数的索引0,4,8,12

相关问题