//首先針對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);
}