문제

아래 코드는 biginteger를 10 진수 형식의 파일로 인쇄합니다. 코드를 이진 데이터를 인쇄하고 16 진수 데이터를 파일로 변환하는 방법?

static void
print_pos( FILE* f, bigint bi )
{
    if ( bi_compare( bi_copy( bi ), bi_10 ) >= 0 )
        print_pos( f, bi_int_divide( bi_copy( bi ), 10 ) );
    putc( bi_int_mod( bi, 10 ) + '0', f );
}

BI_10은 단지 큰 유형 일뿐입니다. 소수점 데이터 대신 16 진수 / 이진 데이터를 인쇄하기 위해 위의 코드를 어떻게 수정합니까?

도움이 되었습니까?

해결책

기본 N에서 인쇄하려면 세 가지 변경 사항을 변경해야합니다.

  1. 두 번째 줄에서 10으로 나누는 대신 n으로 나눕니다.
  2. 세 번째 줄에서 모드 10을 수행하는 대신 Mod Base N을 수행합니다.
  3. 2 행 2에서 모듈을 적절한 문자로 변환해야합니다. 기본> 10을하는 경우 if/else를 수행해야합니다.

평범한 정수를 사용하는 모습은 다음과 같습니다. 큰 INT 라이브러리를 사용하기 위해 적절한 변경을하겠습니다.

static void
print_pos( FILE* f, int n, int base )
{
    if (n < 0)
    {
        n *= -1;
        putc( '-', f );
    }

    if (n >= base)
        print_pos( f, n / base, base );

    int d = n % base;
    const char *digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    putc( digits[d], f );
}

마지막 댓글 몇 개.

  1. 원래 코드는 음수를 다루는 것을 잊어 버립니다.
  2. 이 기능은 기본 36까지 작동합니다. 더 큰베이스를 원한다면 확장해야합니다. char c = ... 선.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top