将int数组传递给期望C中的字符的函数

时间:2013-04-01 12:12:40

标签: c arrays casting char int

如何将无符号整数缓冲区传递给期望缓存无符号字符的函数?该功能将运行并更新缓冲区。 接下来是我想要实现的伪代码。

unsigned int* inputBuffer = (unsigned int*)malloc(bufferSize);

function(inputBuffer); <- How to perform this correctly?

bool function(unsigned char *buffer)
{
  ...operate and update values of buffer
}

2 个答案:

答案 0 :(得分:1)

这取决于功能的作用。如果它对缓冲区中的字节进行操作(如memcpymemcmp等等),则只需转换指针:

function((unsigned char *)inputBuffer);

如果函数对缓冲区中的元素(整数)进行操作,那么您必须将整个内容复制到临时缓冲区中:

size_t nelems = bufferSize / sizeof(unsigned int);
unsigned char *temp = malloc(nelems);
if (temp == NULL)
    // handle error

for (size_t i=0; i < nelems; i++)
    temp[i] = (unsigned char)(inputBuffer[i]);
function(temp);

// copy results back into inputBuffer
free(temp);

但是,如果您发现需要执行此类操作,那么程序中可能存在设计缺陷。除非你正在设计一个设计糟糕的图书馆,否则你根本不应该这样做。

答案 1 :(得分:0)

int和char的大小不同。将一个int数组传递给一个期望一组char的函数将导致该函数将每个int视为(不一定但通常是)4个字符。 您需要重构其余代码以使用char数组,或创建临时char数组,将每个元素复制到它,然后调用该函数并将每个元素复制回来。

然而,“你为什么要这样做”的问题(H2CO3的评论)仍然存在;不同的情况需要不同的解决方案。

相关问题