2016-10-31 2 views
0

unsigned char *를 char *로 변환하고 값을 출력 한 다음 char *을 unsigned char *로 다시 변환하려고합니다. 어떻게해야합니까?unsigned char *를 char *로 변환하는 방법 *

+4

강제 변환은 캐스팅 절대적으로 필요한 경우가 아니면 피해야한다, C에서 캐스팅에 의해 수행하지만된다. 왜 이럴 필요가 있니? 귀하의 질문은 더 많은 맥락을 제공해야합니다. – user694733

답변

0
unsigned char x = 0xFF; 
unsigned char *p = &x; 

printf("Signed value - %d\n", *((char *)p)); 
printf("Unsigned value - %u\n", *p); 

하지만 가능한 경우 그러한 주조는 피해야한다는 의견에 동의합니다.

+0

나는 downvote에 대한 이유를 얻지 못했습니다. 설명 할 수 있니? – dkolmakov

2

바이트 배열은 char, unsigned char 또는 signed char의 배열로 해석 할 수 있습니다. C 라이브러리에서

대부분의 문자열 함수 유형 char * 또는 const char *의 인수를하고, 배열은 지적 가정 (널 (NULL) 종료를 같은 포인터에 의해 문자열이, 종래 null 문자 상수로 작성하면 끝을 나타내는 null 바이트 '\0').

배열에 unsigned char이 널 종결자인 경우 해당 라이브러리 함수에 전달할 때 해당 주소를 (char *) 또는 (const char *)으로 캐스팅하지 않아도됩니다. 예를 들어

:

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    unsigned char buf[256]; 
    char *p; 

    for (size_t i = 0; i < sizeof(buf); i++) { 
     buf[i] = (i + 1) & 255; 
    } 
    printf("length of array: %d\n", (int)strlen((char *)buf)); 
    printf("complete character set: >>>%s<<<\n", (char *)buf); 

    p = (char *)buf; 
    printf("char type is %s by default\n", p[128] < 0 ? "signed" : "unsigned"); 
    return 0; 
} 
관련 문제