関数 | |
| int | do_snprint (char *buf, size_t len, mp_cref_t mz, digit_t radix) |
| 多倍長整数をr進表記で文字列に変換. より詳しく... | |
| int | ymp_fprint (FILE *fp, mp_cref_t mz, digit_t radix) |
| 多倍長整数をr進表記でファイルに出力. より詳しく... | |
| int | ymp_snprint (char *buf, size_t len, mp_cref_t mz, digit_t radix) |
| 多倍長整数をr進表記で文字列に出力. より詳しく... | |
変数 | |
| const int | digit_prec = DIGIT_BIT/4 + (DIGIT_BIT%4!=0) |
|
||||||||||||||||||||
|
多倍長整数をr進表記で文字列に変換. buf[buf_len-1]から、バッファーを逆順に埋める。先頭部分は使われないかも知れない。
参照 digit_t, mp_cref_t, ymp_divmodabs_digit, と YMP_TEMP_ALLOCATE. 呼出 ymp_fprint, と ymp_snprint.
00034 {
00035 int ret = 0;
00036 size_t tmp_used = mz->used;
00037 digit_t *tmp;
00038
00039 if (tmp_used == 0)
00040 {
00041 if (len > 0) buf[len-1] = '0';
00042 return 1;
00043 }
00044
00045 YMP_TEMP_ALLOCATE(tmp, digit_t, tmp_used);
00046 memcpy(tmp, mz->digits, sizeof(digit_t)*tmp_used);
00047
00048 do
00049 {
00050 digit_t d = ymp_divmodabs_digit(tmp, tmp, radix, tmp_used);
00051 if (!tmp[tmp_used-1]) --tmp_used;
00052
00053 if (len-- > 0) buf[len] = "0123456789abcdefghijklmnopqrstuvwxyz"[d];
00054
00055 ++ret;
00056 } while (tmp_used != 0);
00057
00058 if (len-- > 0 && mz->sign) {buf[len] = '-'; ++ret;}
00059 return ret;
00060 }
|
|
||||||||||||||||
|
多倍長整数をr進表記でファイルに出力.
参照 digit_len_to_str_len, digit_t, do_snprint, mp_cref_t, と YMP_TEMP_ALLOCATE.
00072 {
00073 int ret;
00074 char *buf;
00075 size_t buf_len = digit_len_to_str_len(mz->used, radix);
00076
00077 YMP_TEMP_ALLOCATE(buf, char, buf_len);
00078 ret = do_snprint(buf, buf_len, mz, radix);
00079 assert(ret <= buf_len);
00080 return fwrite(buf+buf_len-ret, 1, ret, fp);
00081 }
|
|
||||||||||||||||||||
|
多倍長整数をr進表記で文字列に出力.
参照 digit_len_to_str_len, digit_t, do_snprint, mp_cref_t, と YMP_TEMP_ALLOCATE.
00095 {
00096 int ret;
00097 char *new_buf;
00098 size_t new_buf_len = digit_len_to_str_len(mz->used, radix);
00099
00100 YMP_TEMP_ALLOCATE(new_buf, char, new_buf_len);
00101 ret = do_snprint(new_buf, new_buf_len, mz, radix);
00102 assert(ret <= new_buf_len);
00103
00104 if (ret > len) memcpy(buf, new_buf, len);
00105 else memcpy(buf, new_buf+new_buf_len-ret, ret);
00106 return ret;
00107 }
|
|
|
呼出 ymp_dump, と ymp_print_hex. |
1.2.14 作者 Dimitri van Heesch,
© 1997-2002