gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:05:07 26 4
gpt4 key购买 nike

下面的代码以十进制格式将大整数打印到文件中,我如何将代码转换为将二进制数据和十六进制数据打印到文件中? ??

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

最佳答案

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

  1. 不要除以第二行中的 10,而是除以 N
  2. 不要在第三行中执行 mod 10,而是执行 mod base N
  3. 您需要将第 2 行的模块转换为适当的字符。如果你的基数 > 10,你将需要执行 if/else

这是使用普通整数的结果。我将让您进行适当的更改以使用您的 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 = ... 行。

关于c - 在文件中打印二进制(字节)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com