我能想到一些低效的方法来完成这个任务,但我想知道最好的方法是什么。
例如,我想复制从字节中的第3位开始的10个字节,并像往常一样复制到指针中。
有没有比一次复制一个移位字节更好的方法?
谢谢。
我能想到一些低效的方法来完成这个任务,但我想知道最好的方法是什么。
例如,我想复制从字节中的第3位开始的10个字节,并像往常一样复制到指针中。
有没有比一次复制一个移位字节更好的方法?
谢谢。
long
对齐以进行大部分操作。在x86架构中,你可以访问的最小单元是一个字节。然而,你可以一次性访问4个字节,并且可以同时处理4个字节而不是一个字节。为了获得更快的速度,你可以使用pslldq (SSE2)。当然,确保你的拷贝对齐以获得最大的性能。
memcpy
。 - SamB这是我编写的解决方案,并开始使用。
void RightShiftMemCopy(uchar * pSource, uchar * pDest ,ushort len,uchar shiftOffset)
{
ushort i=0;
pDest+=(len-1);
pSource+=(len-1);
for(i=len-1;i != 0 ;--i)
{
*pDest = (*(pSource - 1) << 8 | *pSource) >> shiftOffset;
--pDest;
--pSource;
}
*pDest = *pSource >> shiftOffset;
}
memcpy()
来复制一个字节。只需使用 destData[i] = val
。你在这里使用的 pSource
是一个糟糕的命名选择。而且它在 memcpy
调用中的使用假定了特定的字节序。 - RBerteig