2016-12-08 3 views
-5

두 개의 정수를 문자열에 연결 한 다음 문자열을 문자 단위로 읽고 16 진수로 인쇄 할 때 해당 숫자의 16 진수 값은 다음과 같습니다. 숫자 자체.C++에서 16 진수 값 변환 문자열

예 :

  • 내가 두 숫자, 6, 8, 문자열 "야후"를 갖고 있다고 할 수 있습니다.

  • 첫 번째 단계에서는 나는 하나의 문자열 "6yahoo8"을 snprintf()을 사용하여 연결합니다. 다음 단계에서

  • , 난은 16 진수 값 밖으로 문자 인쇄 의한 캐릭터 문자 나 최종 결과를 얻으려는

  • 읽기 등 :

    {이 0x06, 0x79,이 0x61, 0x68 , 0x6F, 0x6F, 0x08}.

  • 하지만 내 프로그램이 결과를 인쇄 :

    {0x36, 0x79,이 0x61, 0x68, 0x6F, 0x6F, 0x38로}.

    이 결과는 첫 번째 및 마지막 바이트를 제외하고 올바른 것입니다. 아이디어를 얻는 방법을 알고 싶습니다. 조언을 대단히 감사드립니다.

    내가 문자열을 형성하기 위해 사용하고있는 프로그램 :

    string encode_url() { 
        StringAccum sa; 
        string url; 
        const char *str = "yahoo"; 
        int p = 6; 
        int q = 8; 
        sa.snprintf(1,"%x", p); // snprintf(len, format, value); 
        sa << str.c_str(); 
        sa.snprintf(1, "%x", q); 
        url = string(sa.take_string().c_str()); 
        return url; 
    } 
    

    우리는 기본적으로 C에서 문자열 배터리입니다 StringAccum처럼 사용하는 일부 관습 기능이 있습니다 ++.

+4

"C/C++"는 사용을 중지하십시오. –

+1

@NickyC 나는 더 나은 버전의 같은 : P –

+2

문자열에 숫자를 넣을 때 문자가되며 '6'에 대한 ASCII 코드는 36입니다. – Photon

답변

0

이유를 찾으려면 ASCII 문자 코드를 살펴 봐야합니다.

16 진수로 8을 변환하면 0x38이됩니다. 6과 비슷하면 0x36이됩니다.

왜 여기에 8이 문자 변수가 아니기 때문에 0x8 대신 0x38을 얻었습니까? (정수보다 조금 덜 분명합니다. 정수형의 다른 유형 인 char입니다. 기본적으로 다른 종류의 int이지만, 다른 응용 프로그램이 있음).