尝试左移2个字节时,AVX2 _mm256_shuffle_epi8在字符串的中间留有空隙

问题描述

这是我加载到__m256i中的字符串

static __attribute__((aligned(32))) char data[33] = "  Mozilla/5.0 (Windows NT 10.0; ";

__m256i vec_data = _mm256_load_si256((const __m256i *) data);

在data [0]和data [1]处有2个空格(0x20)...我想使用shuffle并删除这些空格...所以我这样做了:

vec_data = _mm256_shuffle_epi8(vec_data,_mm256_set_epi8(-1,-1,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2));

我期望的是:

Mozilla/5.0 (Windows NT 10.0;

但是存储在vec_data中的是:

Mozilla/5.0 (W  dows NT 10.0; 

空格是从字符串开头删除的,但是中间的2个字符会发生什么! Windows更改为W dows !!!!!!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)