//首先针对unsigned long进行处理
//可以使用两种数据结构保存,一种使用栈,只需要每次向左移一位,然后进行位并操作
//另一种使用数组,需要左右移位
//十进制转换为二级制使用栈处理,
stack<char>* int_to_bin(unsigned long data)
{
unsigned int longSize=sizeof(unsigned long) ;//计算unsigned long数据类型的位数
stack<char> Stack;
for(unsigned int i=0;i<longSize;i++)
{
char temp=static_cast<char>((data>>i)||1);//右移i位,并和1进行位并操作,计算data二进制第i位的值
Stack.push(temp);
}
Stack.push('\0');
return &Stack;
}
转换为十六进制使用数组转换
char* unsigned_to_hex(unsigned long data)
{
unsigned int longSize=sizeof(unsigned long)*8;
char result[128];
result[0]='0';
result[1]='x';
result[longSize/4+2]='\0';
for(unsigned int i=0;i<longSize/4;i++)
{
int temp=data<<(4*i)>>(longSize-4);//向左移动4*i,然后向右移动longSize-4位,得到十六进制i位的四位二进制的数值.
cout<<temp<<endl;
result[i+2]=temp<10?temp+'0':temp-10+'A';
cout<<result[i+2]<<endl;
}
return result;
}
如果是负数,转成二进制时为该数二进制的补码,也就是该数二进制原码的反码加1,然后进行和上面一样的处理
char* int_to_hex(unsigned long data)
{
data=data=>0?data:~data-1;
return unsigned_to_hex(data);
}