从char*型十进制转二进制

3

我有一个包含一些十进制值的字符串,其中数字位数可能超过任何现有的int类型所能容纳的范围(我知道数字的位数)。请给我一些提示,如何将该数字转换为其二进制表示形式(因此我将得到另一个char *变量,其中包含二进制)。


数字的位数比最大的整型类型还要大,还是它所代表的数字更大? - Luchian Grigore
标准的转换算法需要你至少拥有针对那些大整数的乘法代码。 - Nobody moving away from SE
2
你有哪些库选择?使用像GMP这样的库,这应该是一个微不足道的任务。 - PlasmaHH
这是作业吗?如果是,请告诉我们。 - Heisenbug
这个问题我已经找到了,但是我自己无法解决,所以想要一些提示。我只想将聊天中的十进制数转换为二进制数,不需要对其进行任何计算。请勿使用任何库,只能使用C语言。 - Alecs
显示剩余3条评论
3个回答

4

您可以使用类似GNU多精度库的工具,该工具支持非常长的数字。


3

你将需要一个定制的 BigInt 库。GMP 是一个不错的选择。


2

以下是一些提示(如果您想手动实现它)。

我是这样做的(作业):

  1. 我使用一个无符号整数数组来存储表示数字的位(使用二进制补码表示法)。
  2. 我在该数组上实现了移位和加法操作(具有经典积分类型的相同语义)。
  3. 由于您可以用乘积和表示一个数字,所以我使用了一种具有移位和加法的算法(如此帖子所示)。您可以使用字符串中单个字符的位置生成正确的二进制表示。

(我不知道是否有更好或更快的解决方案。) 我不会发布代码,这样您就可以享受自己完成它的乐趣;)


我使用了一个无符号整数数组来存储表示数字的位(使用二进制补码表示)- 我认为这一点几乎就是我的问题所在。我有一个char*中的十进制数,我想将它转换成二进制。 - Alecs
那么对于你的目的来说,vector<unsigned int>是一个适合的“二进制表示”吗?在你得到答案之前,很难给出更多细节。 - Useless
我不认为vector的STL实现保证向量元素是连续分配的。因此,即使使用向量,您也可以这样做,但效率可能会降低。 - Heisenbug
是的,但你仍然没有说出你需要从表示中得到什么:它可以是一个布尔数组、一个std::bitset、一个整数向量——它们在逻辑上都是相同的,因为你可以在某个二进制数字的逻辑序列中测试和设置任意位的值。你甚至可以只使用一个字符串,并从十进制转换为二进制。 - Useless
@Heisenbug std::vector 要求具有常数时间访问,因此在实践中它不可能 是连续的。 - Useless
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接