我需要在复制到另一个阵列期间有效地交换数组的字节顺序。复制期间的字节交换
源数组是特定类型的; char,short或int,因此所需的字节交换是明确的,并且将根据该类型进行。
我的计划是使用多遍逐字节拷贝(简称为2,简写为int,...)来完成此操作。但是,是否有任何预先存在的“memcpy_swap_16/32/64”函数或库?也许在用于BGR/RGB图像处理的图像处理中。
编辑
我知道如何交换个体值的字节,这是没有问题的。我想在的副本中执行此过程,我将执行。
例如,如果我有一个数组或小端的4字节整数,我可以通过执行4个按字节复制,初始偏移量为0,1,2和3,步长为4来进行交换。一种更好的方法,甚至可以单独读取每个4字节的整数,并使用字节交换内部函数_byteswap_ushort,_byteswap_ulong和_byteswap_uint64将会更快。但我怀疑必须有现有的功能来完成这种类型的处理。
EDIT 2
刚刚发现这一点,这可能是上证所的有用基础,但其真正的内存带宽,可能使得它在浪费时间。
Fast vectorized conversion from RGB to BGRA
编译器字节交换内在函数是保证使用正确指令的更好方法。但这不是问题。 – hplbsh
我不确定你为什么称他们为“更好”。它们特定于特定的编译器。我给出的代码将在任何真正困扰优化的编译器上生成“正确”指令。 –
因为即使在未优化的调试版本中它也会很快。 – hplbsh