我想在十六进制字母表中显示一个数字,但我不知道如何。
例如,我使用了这个号码 我希望这个号码显示为“FF FF”,但它显示为“15 15”
number是我想要转换的数字
base是所需的字母(bin,dec,oct,hex)
str是带有数字
的表数字是我有多少位数
# include <iostream>
using namespace std;
class Number
{
private:
int number;
int base;
int str[80];
int digits;
void convert();
public:
Number(int n);
Number(int n,int b);
printNumber打印数字
void printNumber();
};
convert是转换数字
的函数void Number::convert()
{
int icount=0;
int x=number;
while(x!=0)
{
int m=x % base;
x=x/base;
str[icount]=m;
icount=icount+1;
}
位数统计我拥有的位数
digits=icount;
}
此函数用作基数dec
Number::Number(int n)
{
number=n;
base=10;
convert();
}
此函数使用整数b作为基数
Number::Number(int n,int b)
{
number=n;
base=b;
convert();
}
void Number::printNumber()
{
int i;
for(i=digits-1;i>=0;i--)
cout<<str[i]<<" ";
cout<<endl;
}
int main()
{
Number n1(255);
Number n2(254,16);
n1.printNumber();
n2.printNumber();
std::cout << "Press ENTER to continue...";
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
return 0;
}
答案 0 :(得分:5)
#include <iomanip>
#include <iostream>
std::cout << std::hex << number;
答案 1 :(得分:0)
将int str[80];
成员更改为char str[80]
。
然后将str[icount]=m;
方法中的行convert()
更改为:str[icount]="0123456789abcdef"[m];
最后确保str
为零终止,并简单地打印为字符串。
显然只是打印一个十六进制值,你可以像clcto建议的那样使用标准库,但我想这不是你的议程......
答案 2 :(得分:0)
如果您想要真正控制输出的格式,请使用旧的C风格printf()
。虽然它的语法不像C ++流那样直观,但它更适合做复杂的事情。对于十六进制数字,您可以使用x
转换:
#include <stdio.h>
int number = 255;
printf("Here is a hex number: %x\n", number);
上面的代码将导致
的输出Here is a hex number: ff
现在,如果要输出数字数据,通常需要将所有位输出为十六进制,包括前导零。轻松printf()
:
printf("My int has the bits: 0x%08x\n", number);
将输出
My int has the bits: 0x000000ff