首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将大十六进制数转换为十进制数

将大十六进制数转换为十进制数
EN

Stack Overflow用户
提问于 2015-07-24 15:00:24
回答 3查看 1.9K关注 0票数 0

我有一个很大的十六进制数,例如CD4A0619FB0907BC00000 (25!)或者其他任何像这样的数字。现在,只使用标准C/C++代码(没有像Boost这样的库),我想将这个数字转换为十进制数15511210043330985984000000。不幸的是,对于64位整数(如long long)来说,它太大了,我也不想使用任何浮点数据类型。如果这是可能的话,你怎么能做到呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-24 15:13:56

假设您不想使用任何符合您的描述的资源,“库就像Boost”。简单的答案是编写您自己的子集,只需使用所需的操作。如果32位十六进制数字就足够了,那么最简单的方法就是为128位int创建自己的128位无符号int,并为该128位int编写一个除以10的函数(产生商和余数)。你真的不需要任何其他函数,除以10是相当容易的。将多达32位十六进制数字转换为128位int是很简单的,从一系列除以10的数字生成十进制输出也是微不足道的。如果您想要的基本上是无限的大小,那么它可能更简单地表示一个十进制数字字符串的数字,并写一个例程乘以16,并添加另一个数字。这将永远不是有效的解决方案,只是可能更容易为您的目的和无限大小的代码。

票数 1
EN

Stack Overflow用户

发布于 2016-08-17 17:07:42

代码语言:javascript
复制
vector<unsigned int> bin2dec(vector<unsigned int> binary)
{
    vector<unsigned int> decimal;
    bool all_zero = false;

    // binary[i]: stores 8-bit of the nubmer.
    // Ex. 258 = 0x102 => binary[0] = 0x2, binary[1] = 0x1.
    while (!all_zero) {
        all_zero = true;
        for (int i = binary.size() - 1; i >= 0; i--) {
            int q = binary[i] / 10;
            int r = binary[i] % 10;

            binary[i] = q;
            if (i > 0) {
                binary[i-1] += (r << 8);
            } else {
                decimal.insert(decimal.begin(), r);
            }
            if (q != 0) {
                all_zero = false;
            }
        }
    }
    // each element stands for one digit of the decimal number.
    // Ex. 258 => decimal[0] = 2, decimal[1] = 5, decimal[2] = 8.
    return decimal; 
}
票数 1
EN

Stack Overflow用户

发布于 2015-07-24 15:14:37

如果您不想使用外部库,那么您必须自己实现任意精度的整数类型。有关如何做到这一点的想法,请参见this问题。您还需要一个函数/构造函数来将十六进制字符串转换为新类型。有关如何做到这一点的想法,请参见this问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31613810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档