2013-04-01 4 views
0

unsigned int의 버퍼를 unsigned char의 버퍼를 기다리는 함수에 전달할 수 있습니까? 이 함수는 버퍼를 조작하고 업데이트합니다. 다음은 달성하려는 의사 코드입니다.C의 문자를 예상하는 함수에 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 
} 
+4

왜 당신 *** *** 이거합니까? –

+1

이것은 나쁜 생각처럼 보입니다. – Joe

+1

@ 아비네트 아니요, 타이 캐스팅은 문제를 숨 깁니다. –

답변

1

기능에 따라 다릅니다. 함수가 버퍼에 요소 (정수)에서 작동하는 경우는,

function((unsigned char *)inputBuffer); 

: 그것은 (같은 memcpy, memcmp 등 수행) 버퍼에 바이트에서 작동하면, 단지 포인터를 캐스팅 '임시 버퍼에 전체 내용을 복사해야 할 것이다 :

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

을하지만, 당신이 이런 일을 할 필요가 있음을 발견하면, 다음 설계 결함은 프로그램 어딘가에 아마있다. 잘못 설계된 라이브러리로 작업하는 경우가 아니라면이 작업을하지 않아도됩니다.

0

int와 char는 서로 다른 크기입니다. char의 배열을 기대하는 함수에 int 배열을 전달하면 해당 함수는 각 int를 (반드시는 아니지만 일반적으로) 4 개의 문자로 처리하게됩니다. char 배열로 작업하기 위해 나머지 코드를 재구성하거나 임시 char 배열을 만들고 각 요소를 복사 한 다음 함수를 호출하고 각 요소를 다시 복사해야합니다.

그러나 "당신은 왜 이것을하고 싶습니까?"(H2CO3의 의견)의 견해는 여전히 유효합니다. 다른 상황은 다른 해결책을 요구합니다.