为了处理不同的数据类型,以下代码可以正常工作。但是有没有更好的方法来编写它而不重复不同数据类型的代码?
in = (unsigned char *) calloc(pixels, bpp);
out = (unsigned char *) calloc(pixels, bpp);
if (bpp == 1)
for (x = 0; x < pixels; x++)
*(out + (x * bpp)) = *(in + (x * bpp));
if (bpp == 2)
for (x = 0; x < pixels; x++)
*(short *)(out + (x * bpp)) = *(short *)(in + (x * bpp));
if (bpp == 4)
for (x = 0; x < pixels; x++)
*(float *)(out + (x * bpp)) = *(float *)(in + (x * bpp));
if (bpp == 8)
for (x = 0; x < pixels; x++)
*(double *)(out + (x * bpp)) = *(double *)(in + (x * bpp));
感谢迄今为止的回复,并对我不明确表示歉意。上面的代码片段只是我试图实现的一个例子。假设我们想要重新排列值的顺序,例如:
for (x = 0; x < pixels; x++)
*(out + (pixels - 1 - x) * bpp) = *(in + (x * bpp));
这里的memcpy()无济于事。基本上我想摆脱不同数据类型的重复代码,所以我可以按任何方式为任何数据类型排序值。
答案 0 :(得分:8)
为什么不使用memcpy()
?
memcpy(out, in, pixels * bpp);