手动打印N字节整数

rub*_*nvb 5 c++ printing integer arbitrary-precision

什么是可伸缩算法来手动打印其值不适合的N二进制数字整数long long.我知道printf和朋友一起<iostream>(最有可能的背驮式<cstdio>有内置的标准类型,但我想为一个由N个字节组成的整数.

我已经考虑过这个并且用谷歌搜索了一下,但它总是归结为使用像GMP这样的预先存在的bigint图书馆(我根本不熟悉的代码库)或"使用printf"或者最有用的"这很难" .

整数基本上是:

template<size_t N>
class Integer{
...
private:
    int8_t first;
    uint8_t rest[N-1];
}
Run Code Online (Sandbox Code Playgroud)

所以重新解释一个Integer<4>字节可以得到你int32_t.我想把它缩放到N> 8.目前效率并不是我真正关心的问题.也不是字节序(这是针对x86).

fre*_*low 5

步骤1:以字符串格式定义包含2的幂的查找表:

const char * const powers_of_two[] = {"1", "2", "4", "8", "16", "32", "64", ...};
Run Code Online (Sandbox Code Playgroud)

第2步:编写一个以字符串格式添加两个数字的函数.

步骤3:遍历数字中的位并添加与1位对应的所有字符串.

第4步:打印结果.

我自己用这种方法打印非常大的浮点数,它对我来说很好.

  • 你甚至不需要2的幂表:只需将数字加到自身乘以2; 如果位为1,则将数字加1; 重复==>利润 (2认同)