2014-11-14 3 views
0

16 진수로 서명 숯불/INT 변환입니다 HEX 값, 문제가 더 정확한 번역 ascci 테이블입니다 0D는, 변환 : AD 코드 :C의 Conver 유럽 부호 문자가

char int_to_hex(int d) { 
    if (d < 0) return -1; 
    if (d > 16) return -1; 
    if (d <= 9) return '0' + d; 
    d -= 10; 
    return (char)('A' + d); 
} 
void uint_to_hex(unsigned char in, char **out, int *olen) { 
    int i = 0; 
    int remain[2]; 
    int result = (int)in; 

    while (result) { 
     remain[i++] = result % 16; 
     result /= (int)16; 
    } 
    for (i = 1; i >= 0; --i) { 
    char c = int_to_hex(remain[i]); 
    if((int)c == -1) { continue; } 
    *((*out) + (*olen)) = (char)c; (*olen)++; 
    } 
} 

이 잘못 ..

+0

'out'은 다소 이상합니다. 이것을 어떻게 부르는지 보여 주어야합니다. 또한, 예를 들어 'snprintf()'는 이것을하기 위해서? – unwind

+0

오류 케이스는 무엇입니까? – 4pie0

+0

아마도 발신자가 아닙니다. – BLUEPIXY

답변

1

먼저 16 진수 한 자리는 0에서 16이 아닌 0 (0)에서 15 (F)까지의 값을 포함합니다 (int_to_hex 함수에서 가정하는 것처럼).
또한이 함수의 마지막 반환에서 char으로 typecasting 할 필요가 없습니다. 사실
여기에 모든 타입 변환은

그리고 어떻게 샘플 입력 uint_to_hex를 찾고 있습니다 ...
그리고 문자 16의 타입 캐스팅은 순전히 부조리를 오히려 불필요? 입력 (in)에서 단 하나의 char 배우를 전달할 수 있다는 것을 알고 계십니까?

나는 숯불 포인터가 충분할 것이라고 생각한다. out - 배열을 반환하고 싶다. 맞습니까? ** 대신 *을 사용해야합니다.
그리고 나는 왜 olen이 포인터가되어야하고 (또한 함수의 인수가되어야하는지) 이해할 수 없습니다.

그리고 더 간결하고 읽기 쉬운 코드를 작성해야합니다. 그렇게하면 자신이하는 일을 이해하는 데 도움이됩니다.

+0

예, 단일 문자 만 허용 – Den68