二进制到十进制(数量巨大)

罗曼·佩雷拉(Romain Pereira)

我在大整数上建立一个C库。基本上,我正在寻找一种快速算法,将二进制表示形式中的任何整数转换为十进制形式

我看到了JDK的Biginteger.toString()实现,但是对我来说看起来很沉重,因为可以将数字转换为任何基数(它对每个数字使用除法,在处理成千上万个数字时应该很慢)。

因此,如果您有任何需要分享的文档/知识,我将很高兴阅读。

编辑:关于我的问题的更多精度:

  • 设P为内存地址

  • 令N为在P处分配(并设置)的字节数

如何将地址P处由N个字节表示的整数(为了简化起见,用小尾数表示)转换为C字符串

例子:

  • N = 1

  • P =一些随机存储器地址,存储“ 00101010”

  • 输出字符串=“ 42”

还是谢谢你的回答

斯蒂芬·豪斯坦(Stefan Haustein)

BigInteger.toString方法看起来很繁重的原因是分块进行转换。

一个简单的算法将取最后一位数字,然后将整个大整数除以基数,直到没有余数为止。

一个问题是大整数除法非常昂贵,因此将数字细分为可以用常规整数除法(与BigInt除法相对)进行处理的块:

static String toDecimal(BigInteger bigInt) {
  BigInteger chunker = new BigInteger(1000000000);
  StringBuilder sb = new StringBuilder();
  do {
    int current = bigInt.mod(chunker).getInt(0);
    bigInt = bigInt.div(chunker);
    for (int i = 0; i < 9; i ++) {
      sb.append((char) ('0' + remainder % 10));
      current /= 10;
      if (currnet == 0 && bigInt.signum() == 0) {
        break;
      }
    }
  } while (bigInt.signum() != 0);
  return sb.reverse().toString();
}

就是说,对于固定的基数,您可以根据注释的建议,将“ double dabble”算法移植到您的需求上甚至更好:https//en.wikipedia.org/wiki/Double_dabble

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++二进制到十进制

来自分类Dev

二进制到十进制的转换-公式说明

来自分类Dev

Prolog:将元素放在列表中以进行十进制到二进制的转换

来自分类Dev

简单的二进制到十进制转换器-C#中的问题

来自分类Dev

二进制到十进制Java转换器

来自分类Dev

Perl十进制转换为二进制

来自分类Dev

了解Adruino二进制到十进制对话

来自分类Dev

递归二进制到十进制

来自分类Dev

C ++二进制到十进制?

来自分类Dev

二进制到十进制-Prolog

来自分类Dev

十进制到二进制转换器

来自分类Dev

QBASIC十进制到二进制转换

来自分类Dev

十进制到二进制Clojure

来自分类Dev

十进制转换为二进制

来自分类Dev

十进制到二进制python算法

来自分类Dev

十进制到二进制Clojure

来自分类Dev

十进制到二进制转换C ++

来自分类Dev

二进制到十进制

来自分类Dev

十进制到二进制转换器无法计算大于1023的十进制

来自分类Dev

递归二进制到十进制

来自分类Dev

C ++二进制到十进制?

来自分类Dev

十进制到二进制转换错误

来自分类Dev

C ++中的二进制到十进制

来自分类Dev

十进制到二进制:二进制补码,更好的否定表达

来自分类Dev

没有预定义方法(JAVA)的二进制到六进制十进制

来自分类Dev

十进制转二进制

来自分类Dev

十进制转二进制的C程序

来自分类Dev

十进制转二进制错误输出

来自分类Dev

C中的二进制到十进制和十六进制