2012-04-10 4 views
0

저는이 점에 상당히 좌절감을 느끼고 있습니다. 제가 잘못하고있는 것을 정확하게 파악하는 유일한 방법은 훌륭한 사람들에게 물어 보는 것입니다. 나는 (숫자 값을 포함하는) 문자열을 16 진수로 변환하려고한다. 여기에 내 코드가있다. (참고로, 글자에 10-15를위한 스위치를 아직 배치하지 않았다. 나는 이걸 실행할 때 정수 값을 돌려주고 싶었다. ... 운이 없음) :C에서 포인터를 사용하여 16 진수 변환을 계산할 수 없습니다

void toHex(char *inString){ 
    char *charVal = inString; 
    char decVal[100]; 

    for(int i = 0; decVal[i] != '\0'; i++){ 
     decVal[i] = *charVal; 
     charVal++; 
    } 

    char storeMod[100]; 
    int i = 0; 
    int testVal = atoi(decVal); 

    for(i; testVal >= 16; i++){ 
     int a = testVal; 
     testVal = testVal/16; 
     storeMod[i] = a; 
    } 

    int a = 0; 
    char hexval[100]; 
    hexVal[0] = '0'; 
    hexVal[1] = 'x'; 
    for(int j = i+2; j>=2; j--){ 
     hexVal[j] = storeMod[a]; 
     a++; 
    } 

    printf("%s hex valu\n", hexVal); 
    return; 
} 
예를 들어

@ 300 개 수익률의 입력은, 나는 또한 시도 :

잘못도 분명히 300 3fa844e0의 16 진수 값을 반환
char hexVal[100]; 
sprintf(hexVal,"%x",*inString); 
strcpy(instring,hexVal); 

. 어떤 도움을 주셔서 감사합니다, 나는 8 진수도 그렇게해야합니다 그래서이 개념을 파악하고 내가 뭘 잘못하고 있는지 확인해야합니다.

+0

스타일과 명료성을 위해'toHex'의 첫 번째 루프를'strcpy'로 바꾸는 것이 좋습니다 –

답변

4

대신이가있는 경우,

printf("%lx\n", strtol(inString, NULL, 10)); 

그러나 :

sprintf(hexVal,"%x",*inString); 

사용 : 지적 한 바와 같이

sprintf(hexVal, "%x", atoi(inString)); 
+0

'inString'의 길이에 따라'atol()'대신'atol atoi()'. –

+0

@AdamLiss 네, 맞습니다. 이것은 300의 테스트 케이스에서는 작동하지만 임의의 길이 문자열에서는 작동하지 않습니다. – Paulpro

+1

'atol'을 사용하는 경우'% lx "를 사용하십시오. – Dave

0

, 당신은 당신의 전체 기능을 대체 할 수 학교 또는 개인적인 만족, 당신은 두 가지 주요 단계를 알고있는 것 같습니다.

  • 오른쪽베이스의 문자열로 다시 정수
  • 인코딩에 정수를 문자열로 변환합니다.

1 단계는 왼쪽에서 오른쪽으로 (문자열에서 쉬운) 숫자를 단계별로 실행 결과에 10을 곱하고 현재 숫자를 더합니다.

2 단계의 경우 숫자 4 비트 (한 자릿수)를 한 번에 실행하고 그 숫자에 '0'을 삽입하면됩니다. LSB에서 시작했다면 문자열을 뒤집어주십시오.