【问题标题】:Convert Decimal to Hexdecimal C++将十进制转换为十六进制 C++
【发布时间】:2017-07-31 18:20:34
【问题描述】:

我有这段代码,但它似乎只打印了十六进制转换的最后 4 个字符。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main ()
{
int i;
char test [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,test,16);
printf ("hexadecimal: %s\n",test);
getch();
}
  • 输入:3219668508
  • 输出:3e1c
  • 预期输出:bfe83e1c

帮忙?

【问题讨论】:

  • 请记住,int 是有符号类型,通常只有 32 位。那你需要学习the ranges of integer values。现在,带符号的 32 位整数的最大值是多少?
  • 还有那个c++怎么样,我看c代码
  • @xander 我看到了 C 风格的 C++ 代码,因为在 C 中 int main () 将是 int main(void)。我看不出为什么它是 C 而不是 C++。如果 OP 使用 C++ 编译器,则为 C++。
  • 整数为 32 位。但在溢出之前它们只会上升到大约 20 亿,所以 scanf 会失败。
  • @mch 不幸的是,当函数没有参数时,初学者不明确使用void 是很常见的。而且现在大多数编译器前端都支持这两种语言,所以一个可以例如使用g++ 编译C 源代码,使用gcc 编译C++ 源代码。因此,除非我们知道源文件的名称,否则真的没有什么可做的。

标签: c++ hex decimal itoa


【解决方案1】:

我找到了上面代码的替代方法,它有点长但可以正常工作。

#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
unsigned long int decnum, rem, quot;
char hexdecnum[100];
int i=1, j, temp;
cout<<"Enter any decimal number : ";
cin>>decnum;
quot=decnum;
while(quot!=0)
{
    temp=quot%16;
    // to convert integer into character
    if(temp<10)
    {
        temp=temp+48;
    }
    else
    {
        temp=temp+55;
    }
    hexdecnum[i++]=temp;
    quot=quot/16;
}
cout<<"Equivalent hexadecimal value of "<<decnum<<" is : \n";
for(j=i-1; j>0; j--)
{
    cout<<hexdecnum[j];
}
getch();
}

需要在最后一部分合并数组的元素。

【讨论】:

  • 所以目标是能够输入任意长的十进制数并将其转换为十六进制表示法?如果您在问题中提到它,那么我们将能够为您提供更好的帮助,并且可能会为您指出一些任意精度库,例如 The GNU Multiple Precision Arithmetic Library
  • 哦,我建议你find a modern beginners book about C++,更重要的是现代环境和编译器。 &lt;iostream.h&gt; 头文件来自于 1998 年 C++ 标准化之前。它不再存在。
  • @Someprogrammerdude 你关心的是头文件还是代码?
  • 我很担心你作为 C++ 程序员的未来。您似乎使用了一个非常古老的 C++ 预标准变体,并且您并没有真正使用 C++ 可以为您提供的所有功能并将其用作美化的 C 编译器。这意味着你将为成为 C++ 程序员的未来做好充分准备。
  • 关于代码,添加一个指向您发现它的位置的链接可能对将来的参考有用。而且变量的大小仍然存在问题。尝试使用例如值50 亿,你仍然会遇到问题,因为我怀疑即使在 64 位系统上旧编译器也会有 64 位 long 类型。哎呀,即使是 modern 编译器有时在 64 位系统(例如 Visual C++ 编译器)上也没有 64 位 long。不幸的是,您不能真正使用像 uint64_t 这样的固定宽度类型,后者后来在 C 和 C++ 中都标准化了。
【解决方案2】:

另一种选择是使用%x printf format specifier

printf("hexadecimal: %x\n", i);

避免使用itoa函数,它容易出错。

【讨论】:

  • itoa 不仅容易出错,而且也是非标准的。
  • @Someprogrammerdude True.
  • 如果要将结果转换为字符串(就像itoa 会做的那样),您可以使用snprintf
  • %x 不起作用,它为所有十进制值打印 ffd2。
  • 它对我有用,也许你应该清理你的项目或者你的输入是什么? printf("hexadecimal: %x\n", 1024+15); 打印“十六进制:40f”
猜你喜欢
  • 2013-07-20
  • 2012-06-17
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2018-11-18
  • 2011-08-04
相关资源
最近更新 更多