2012-04-20 3 views
0

나는 지금 내가 진수로 변환하고 내가이 작업을 수행 할 수있는 방법CString을 UCHAR 배열로 변환하는 방법은 무엇입니까?

UCHAR sample[2]; 
Sample[0] = 0X50 
Sample[1] = 0X43 

같은 UCHAR 배열에 넣고 싶어 "5043"= CString이 객체의 캐릭터 라인이? 조언 해주세요

+0

다음을 확대하기위한 가능성으로 http://stackoverflow.com/questions/3381614/c-convert-string-to-hexadecimal-and-vice-versa –

+0

이 질문의 범위는 "cstring object str"-> "string"입니다. "UCHAR"-> "unsigned char"를 입력 한 다음 C++ 문항으로 남겨 둡니다. –

답변

1

는 아래처럼 sscanf()를 사용하여 문자열, 뭔가에서 직접 16 진수 값을 검색 할 수 있습니다 :

UCHAR sample[2]; 
for (int i = 0; i < str.length()/2 ; i++) { 
    sscanf((str.substr(i*2,2)).c_str(), "%hx", &sample[i]); 
} 

h은 짧게하고 x은 분명히 진수입니다.

또한 UCHAR 배열이 string 크기의 반으로 선언되어 있다고 가정합니다.

+0

고마워, 잘 작동 해. :) – Naruto

+0

오신 것을 환영합니다 !! – vvnraman

1

strol을 사용해 보셨습니까? 그것은 조금 낮은 기술이지만, 트릭을해야합니다. 기본으로 16을 전달하는 것을 잊지 마세요 ...

결과를 원하는대로 정확히 나눌 수 있도록 약간의 시프트와 비트 단위로 결합해야하지만 간단해야합니다. 이 도움이

희망,

+0

사실, 나는 이미 변환 된 값을 가지고 있지만 UCHAR 변수로 업데이트해야합니다. – Naruto

+0

흠,이 경우에는 다른 질문이 필요합니다. 즉 정수를 2 바이트로 분할하는 방법은 무엇입니까? (16 비트 값의 경우) 상위 바이트에는 8 비트, 비트는 오른쪽으로 시프트하고 하위 바이트에는 255로 시프트 (&)해야합니다. –

0

코드를 더 간단하게 만들려면 union을 사용할 수 있습니다.

union 
    { 
    UCHAR char_val[2]; 
    long long_val; 
    }; 

    CString str = "5043"; 
    long_val = strtol(str.GetString(), nullptr, 16); 
    // use char_val here 
이 이미이 스레드에 대답했을 수 있습니다
관련 문제