6 toencx(mpint *b, char *buf, int len, int (*enc)(char*, int, uchar*, int))
12 n = mptobe(b, nil, 0, &p);
15 rv = (*enc)(buf, len, p, n);
21 topow2(mpint *b, char *buf, int len, int s)
33 for(p = &b->p[b->top-1]; p >= b->p; p--){
35 for(i = Dbits-s; i >= 0; i -= s){
37 if(j != 0 || out != buf){
53 modbillion(int rem, ulong r, char *out, char *buf)
58 for(i = 0; i < 9; i++){
64 if(rem == 0 && r == 0)
71 to10(mpint *b, char *buf, int len)
73 mpint *d, *r, *billion;
80 d->flags &= ~MPtimesafe;
83 billion = uitomp(1000000000, nil);
87 mpdiv(d, billion, d, r);
88 out = modbillion(d->top, r->p[0], out, buf);
100 memmove(buf, out, len);
105 to8(mpint *b, char *buf, int len)
132 *out = '0' + (x & 7);
139 while(*out == '0') out++;
145 memmove(buf, out, len);
156 b = va_arg(fmt->args, mpint*);
158 return fmtstrcpy(fmt, "*");
162 base = 16; /* default */
163 fmt->flags &= ~FmtPrec;
164 p = mptoa(b, base, nil, 0);
166 return fmtstrcpy(fmt, "*");
168 if((fmt->flags & FmtSharp) != 0){
183 fmtprint(fmt, "-%s%s", x, p + 1);
185 fmtprint(fmt, "%s%s", x, p);
195 mptoa(mpint *b, int base, char *buf, int len)
201 base = 16; /* default */
204 /* rv <= logâ‚‚(base) */
205 for(rv=1; (base >> rv) > 1; rv++)
207 len = 10 + (b->top*Dbits / rv);
224 rv = toencx(b, out, len, enc64);
227 rv = toencx(b, out, len, enc32);
230 rv = topow2(b, out, len, 4);
233 rv = to10(b, out, len);
236 rv = to8(b, out, len);
239 rv = topow2(b, out, len, 2);
242 rv = topow2(b, out, len, 1);