在文件中打印二进制(字节)值

时间:2010-01-07 07:16:08

标签: c biginteger

下面的代码将biginteger打印成十进制格式的文件,如何将代码转换为打印二进制数据和十六进制数据而不是文件?

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只是一种bigint,如何修改上面的代码来打印十六进制/二进制数据而不是十进制数据?

1 个答案:

答案 0 :(得分:1)

要在基数N中打印,您需要进行三项更改:

  1. 除了在第二行中除以10,除以N
  2. 不是在第三行中执行mod 10,而是使用mod base N
  3. 您需要将第2行的模块转换为适当的字符。如果你正在做基础> 10,你需要做一个if / else
  4. 这是使用普通整数的样子。我会让你做适当的改变来使用你的big 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 = ...行。