関数 | |
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. |