2011-05-16 3 views
0

기본적으로 토큰 (문자열)을 16 진수 데이터 유형과 비교하려고합니다!16 진수 값의 n 문자 시퀀스 비교

예 :

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

int main(int argc, char *argv[]) { 

    char* token ="Hello"; 
    int hex = 0x2F; 


    if(strncmp(token, "Hil", 3)==0){ 
     printf("Token founde"); //works! 
    }else{ 
     printf("sorry seems to be the hardest word"); 
    } 

} 

이 실제로 물론, 작동합니다. 2 개의 문자열을 적어도 n 개의 charachters와 비교합니다 ... 문제 없습니다.

하지만 이제는 문자열 대신 16 진수 값으로 동일한 작업을 수행하려고합니다. 이 같은 뭔가 : strncmp는 문자열을 비교

int hex = 0x2F; 


    if(strncmp((char*)hex, "0x", 2)==0){ 
       printf("Token founde"); //works! 
      }else{ 
       printf("sorry seems to be the hardest word"); 
      } 

     } 

때문에, 나는 그것은 전혀 작동하지 않습니다 * ... 숯불에 진수 값을 캐스팅하기 위해 노력했다.

나는 "프로그래밍 언어 C"책에서도 ... 어디서나 검색했습니다 ... 그러나이 문제를 해결하는 방법을 알 수는 없습니다.

자바에서는 startsWith 등을 사용합니다.하지만 같은 효과를 낼 수있는 친숙한 함수가 있는지는 알 수 없습니다.

답변

2

흠, 나는 이것이 당신이 원하는 것을 잘 모르겠지만, 지금 당신이 (가장 확실하게 무효) 주소로 진수의 변환된다. 원하는 것을하기 위해 주소 : strncmp((char*)&hex, "0x", 2)을 가져 가야하지만 권장 할 수는 없습니다.

내가 먼저 문자열로 진수를 변환 한 후 비교하는 것이 좋습니다 :

char buf[256]; 
snprintf(buf, 256, "0x%x", hex); 
if(strncmp(buf, "0x", 2)==0){ 
+0

우수함! 그것은 작동합니다! 두 분 모두에게 감사드립니다. –

0

당신은 sprintf를 사용할 수 있습니다

char hexVal[3]; 
sprintf(hexVal, "%02X", hex); 
if(strncmp(token, hexVal, 3)==0){