如何在C ++中从十六进制转换为2 ^ 16系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C ++中从十六进制转换为2 ^ 16系统相关的知识,希望对你有一定的参考价值。

我有这样的任务:用户以十六进制输入数字N1(str1)和N2(str2)。程序必须将十六进制的数字转换为2 ^ 16的系统,并在2 ^ 16的系统中计算数字N1和N2的总和,然后将结果转换为十六进制。

我有这样的主意:首先从十六进制转换为十进制(我可以这样做)。然后将每个数取模N 2dec(dec11)(或N2dec(dec22))乘以2 ^ 16为底的对数,并将余数写到相应的数组中。这是我的问题开始的地方。我从十进制转换为2 ^ 16系统不起作用。希望您能提供帮助。

#include <iostream> 
using namespace std;

int main()
{
//HEX to decimal
const char* const str1 = "101D0";//7A120 = 500000; 101D0 = 66000;   //1F4 = 500=dec1=N1
cout << "Hello!
First number in HEX system is " << str1 << endl;
istringstream is(str1);
int dec1;
is >> hex >> dec1;
if (!is && !is.eof()) throw "dammit!";
cout << "First number in decimal system: " << dec1 << endl;
const char* const str2 = "1567";//5479=dec2=num2
cout << "Second number in HEX system is " << str2 << endl;
istringstream iss(str2);
int dec2;
iss >> hex >> dec2;
if (!iss && !iss.eof()) throw "dammit!";
cout << "Second number in decimal system: " << dec2 << endl;
//

//Decimal to 2^16 system
int dec11 = dec1;//because dec11 will be = 0
int dec22 = dec2;//because dec22 will be = 0

int k = 1 << 16;
cout << "2^16 = " << k << endl;
int intPART1 = log(dec11) / log(k);
cout << "Int part of log2^16 (" << dec11 << ") is " << intPART1 << endl << "So num1 in 2^16 system will look like ";

int *n1 = new int[intPART1 + 1];
for (int i = 0; i <= intPART1; i++)
{
    if (i != 0)
    {
        n1[i] = dec11 % k*(1<<16-1);
        dec11 = dec11 / k;
    }
    else
    {
        n1[i] = dec11 % k;
        dec11 = dec11 / k;
    }
}
for (int i = intPART1; i >= 0; i--)
{
    cout << n1[i] << "   ";
}
cout << endl;
int intPART2 = log(dec22) / log(k);
cout << "Int part of log2^16 (" << dec22 << ") is " << intPART2 << endl << "So num2 in 2^16 system will look like ";

int *n2 = new int[intPART2 + 1];
for (int i = 0; i <= intPART2; i++)
{
    if (i != 0)
    {
        n2[i] = dec22 % k*(1 << 16 - 1);
        dec22 = dec22 / k;
    }
    else
    {
        n2[i] = dec22 % k;
        dec22 = dec22 / k;
    }
}

for (int i = intPART2; i >= 0; i--)
{
    cout << n2[i] << "   ";
}
cout << endl;

我有这样的任务:用户以十六进制输入数字N1(str1)和N2(str2)。程序必须将数字从十六进制转换为2 ^ 16的系统,并计算数字的总和...

答案

由于十六进制值为基数16,假设16 ^ 1,而基数2 ^ 16可以重新计算为16 ^ 4,我们已经可以看到目标基数是源基数的倍数。这使得计算非常简单直接。我们要做的只是有点不合时宜。

另一答案

由于这看起来像是您要解决自己的学习练习,因此有两个提示。

以上是关于如何在C ++中从十六进制转换为2 ^ 16系统的主要内容,如果未能解决你的问题,请参考以下文章

在 C/C+ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法?

在 C++17 / C++20 中从 wstring 转换为 u16string 并返回(标准符合)

如何在目标 c 中从 int 转换为字符串:示例代码

如何在C#中从数据库中检索时将varBinary转换为图像或视频

如何在 Entity Framework Core 2.0 中从 DbDataReader 转换为 Task<IEnumerable<TEntity>>?

在 C 中从 HEX 颜色转换为 RGB 结构