C 在文件中打印二进制(字节)值
下面的代码以十进制格式将biginteger打印到文件中,如何将代码转换为将二进制数据和十六进制数据打印到文件中C 在文件中打印二进制(字节)值,c,biginteger,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 ) +
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为基数打印,需要进行三个更改:
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 );
}
静态无效
打印位置(文件*f,整数n,整数基)
{
if(n<0)
{
n*=-1;
putc('-',f);
}
如果(n>=base)
打印位置(f、n/底座、底座);
int d=n%基数;
常量字符*digits=“0123456789abcdefghijklmnopqrstuvxyz”;
putc(数字[d],f);
}
最后几点评论
charc=…
行+回答得好。请注意,“A”+1不能保证为“B”(或者通常,“A”…“Z”不需要是连续的)0'..'9'保证是连续的。@Alok-理论上我知道字母和数字都不需要顺序。也就是说,你知道有哪种编码仍然常用,但却不能做到这一点吗?也就是说,我已经改为数组,使其在不考虑编码的情况下工作。数字必须是顺序的,因为C标准是这样规定的。对于字母,EBCDIC是字母值不连续的示例。引用EBCDIC上的Wikipedia页面:所有IBM大型机外围设备和操作系统(zSeries或iSeries上的Linux除外)都使用EBCDIC作为其固有编码。如果基2只给出1和0,我需要以二进制格式(字节值?)获取。但我需要的是不可读的二进制格式,它必须使用哪个基??如果不可读的二进制格式,你指的是原始数据,那么你如何获得它将取决于你的bigint实现。如果您使用的是来自axTLS的bigint实现,请查看bi_导出。如果base 2只提供1和0,则需要使用二进制格式(字节值?)。但我需要的是不可读的二进制格式,它必须使用哪个基?C语言中任何与JAVA.toByteArray()或getBytes()方法等价的东西?但是对于这个大的十进制字符字符串,必须使用哪个基来获取Bytearray?谢谢