2011-02-25 4 views
0

printf 전에 char로 변환해야하는 unsigned char이 있습니다. 그래서 예제 코드는 다음과 같이 진행됩니다C/C++ casting 문제, unsigned char from char

unsigned char y = sample.result; 
    char x = (char)y; 
    printf("%c \n", x); 

그러나, printfx를 인쇄하지 않습니다하지만 난 아무 생각이 왜 그렇게이 없습니다를 바르게, x 인쇄 cout을 사용하는 경우. 서명되지 않은 char 변수를 char로 변환하는 방법은 무엇입니까? 내가 잘못 했니? reinterpret_casting은 포인터만을위한 것이고 나의 것은 포인터가 아닙니다. 미리 감사드립니다.

EDIT : 명령 프롬프트에서 unsigned char 1에 해당하는 sample.result의 값에 웃는 얼굴 "☺"을 반환합니다. 분명히 netbeans는이 웃는 얼굴을 인쇄 할 수 없습니다. 나는 그것이 어떻게 웃는 얼굴로 번역되었는지 전혀 모른다. 어떤 도움이 필요합니까?

편집 2 : 문자 x = 1을 인쇄 할 수 없다는 것을 깨달았습니다. 명령 프롬프트에서 인쇄하면 웃는 얼굴이 생깁니다. 원인? :(

+2

나를 위해 컴파일하고 작동하는 것. 당신은 무엇을 얻을 것으로 예상합니까? 그리고 당신은 무엇을 얻고 있습니까? – GreenMatt

+2

캐스팅을 사용하거나 사용하지 않고 나와 함께 작동합니다. 'sample.result'에 127보다 큰 값이 있습니까? –

+0

좋은 방법으로 못생긴 캐스트를 사용하고 싶다면, static_cast가 당신이 찾고있는 것이라고 믿습니다. 그것은 아마도 당신의 문제를 해결하지 못할 것입니다. (나는 Karl의 코멘트를 가지고 있다고 믿습니다.) 그러나 그 일에 가장 가까운 것입니다. –

답변

0

char x = 1 인 경우 1을 인쇄하려면 형식 지정자에 %c 대신 %d을 사용해야합니다. %c은 숫자의 ASCII representation을 인쇄합니다.이 번호는 1에 대해 "제목 시작"이라는 인쇄 할 수없는 문자입니다. 여기

0

int 대신 charx을 시도하고 그 작동되는지 확인합니다. C 규칙은 모든 문자 매개 변수를 int로 변환 할 필요하며 printf는 C 함수이다.

+0

"C 규칙에 따라 모든 char 매개 변수가 int로 변환되어야합니다"어떤 규칙이 필요합니까? – stefan

0

을 나는 확신 아니에요 이 대답은,하지만 난 단지 컴파일과 문자로 다시 서명 숯불 캐스팅하지 않고 문자 A를 인쇄하는 간단한 테스트 프로그램을 작성

#include <stdio.h> 
int main() 
{ 
    unsigned char c = 'A'; 
    printf("%c\n",c); 
    return 0; 
} 

캐스팅 직접적으로도 일했다.

또한 그것 작동 한 방법으로 수행
#include <stdio.h> 
int main() 
{ 
    unsigned char c = 'A'; 
    printf("%c\n",(char)c); 
    return 0; 
} 

...

#include <stdio.h> 
int main() 
{ 
    unsigned char c = 'A'; 
    char d = (char)c; 
    printf("%c\n",d); 
    return 0; 
} 

그래서 나는 지금 뭔가를 잘못하고 있어요 가정합니다. 아니면 뭔가 다른 것이 당신 문제입니까?

+0

글쎄 마지막 코드는 컴파일되지 않으므로 마법 컴파일러가 있어야합니다 ;-) – stefan

+0

죄송합니다! % c 앞에 견적을 잊어 버렸습니다. 결정된. – theseankelly

0

printf%c 변환은 기본 문자 집합의 문자에만 적용됩니다. 인쇄하려는 확장 문자가있는 것 같습니다. 따라서 적절한 도구를 사용해야합니다. 그 유형은 wchar_t이고 인쇄 형식은 %lc입니다. 그러나 이것은 당신의 실행 환경이 많이 달라 지므로, locale 설정과 같은 것들을주의하십시오. char 같은 많은 상황에서

그리고 BTW 좁은 유형은 int 또는 unsigned로 변환, 그래서 거기에 캐스팅 할 필요가없고, 제목 이외의 사실 문제가 캐스팅과 함께 할 일이 많이없는이 있습니다 제안합니다.

0

char c하는 알고리즘 char uc 부호로 변환

방정식.

return (c>127) ? (unsigned char)(-(256 + c)) : (unsigned char)c; 

부호 ucchar c에 대한 알고리즘입니다.

return (uc < 0) ? (char)(256-(char)abs(uc)) : (char)uc; 
관련 문제