在C中管理不同的数据类型而不重复代码

时间:2015-10-29 18:47:42

标签: c types

为了处理不同的数据类型,以下代码可以正常工作。但是有没有更好的方法来编写它而不重复不同数据类型的代码?

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()无济于事。基本上我想摆脱不同数据类型的重复代码,所以我可以按任何方式为任何数据类型排序值。

1 个答案:

答案 0 :(得分:8)

为什么不使用memcpy()

memcpy(out, in, pixels * bpp);