我每秒必须处理大约 2000、100 个元素数组。这些数组对我来说是短裤,其中的数据位于高位,需要移位并转换为字符。这是我能得到的最有效的方法,还是有更快的方法来执行此操作? (我必须跳过其中 2 个值)
for(int i = 0; i < 48; i++)
{
a[i] = (char)(b[i] >> 8);
a[i+48] = (char)(b[i+50] >> 8);
}
即使移位和按位运算很快,您也可以尝试将短数组作为字符指针处理,如注释中其他建议的那样。每个标准都允许这样做,并且对于常见的体系结构来说,它可以实现预期的效果 - 留下字节序问题。
所以你可以尝试首先确定你的字节序:
bool isBigEndian() {
short i = 1; // sets only lowest order bit
char *ix = reinterpret_cast<char *>(&i);
return (*ix == 0); // will be 1 if little endian
}
你的循环现在变成:
int shft = isBigEndian()? 0 : 1;
char * pb = reinterpret_cast<char *>(b);
for(int i = 0; i < 48; i++)
{
a[i] = pt[2 * i + shft];
a[i+48] = pt[2 * i + 50 + shft];
}
但与低级优化一样,必须使用将在生产代码中使用的编译器和编译器选项进行基准测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)