如何将无符号整数缓冲区传递给期望缓存无符号字符的函数?该功能将运行并更新缓冲区。 接下来是我想要实现的伪代码。
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
}
答案 0 :(得分:1)
这取决于功能的作用。如果它对缓冲区中的字节进行操作(如memcpy
,memcmp
等等),则只需转换指针:
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的评论)仍然存在;不同的情况需要不同的解决方案。