0

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

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
}
4

2 回答 2

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);

然而,如果你发现你需要做这样的事情,那么你的程序中可能存在设计缺陷。除非您使用设计不佳的库,否则您根本不应该这样做。

于 2013-04-01T12:16:44.707 回答
0

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

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

于 2013-04-01T12:21:21.573 回答