下面的代码将大整数打印到十进制格式的文件中,如何将代码转换为打印二进制数据和十六进制数据到文件中?
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类型,我如何修改上面的代码来打印十六进制/二进制数据而不是十进制数据?
发布于 2010-01-07 15:21:49
要以N为基数进行打印,您需要进行三个更改:
下面是使用纯整数时的结果。我将允许您进行适当的更改以使用您的大型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 );
}最后几条评论。
你的原始代码忘记处理负的numbers.
char c = ...系列。https://stackoverflow.com/questions/2018827
复制相似问题