0

unsigned chars のバッファを期待する関数に、unsigned ints のバッファを渡すにはどうすればよいですか? 関数が動作し、バッファを更新します。次は、私が達成しようとしているものの擬似コードです。

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 はサイズが異なります。char の配列を期待する関数に int の配列を渡すと、その関数は各 int を (必ずしもそうとは限りませんが、通常は) 4 文字として扱います。残りのコードを再構築して char 配列を操作するか、一時的な char 配列を作成して各要素をコピーし、関数を呼び出して各要素をコピーして戻す必要があります。

ただし、「なぜこれをやりたいのか」(H2CO3 のコメント) という問題は依然として残っています。異なる状況では、異なるソリューションが必要です。

于 2013-04-01T12:21:21.573 に答える