#include <stdio.h>
#include <iostream>
#define MAP_LEN 16
#define HEX_SHIFT 4
#define HEX_LEN ( (int)(32/HEX_SHIFT) + 1 )
#define OCT_SHIFT 3
#define OCT_LEN ( (int)(32/OCT_SHIFT) + 1 )
#define BIN_SHIFT 1
#define BIN_LEN ( (int)(32/BIN_SHIFT) + 1 )
static char mapTable[MAP_LEN] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','A', 'B', 'C', 'D', 'E', 'F' };
void int2other( int number, int size, int mask, int shift ) // size 为字符位数,mask 为低位掩码,shift 为右移位数
{
char* result = new char[size];
int i = 0;
int idx;
while ( number )
{
idx = number & mask; // 每次取低几位
result[ i ] = mapTable[ idx ];
number = number >> shift; // 右移
++i;
}
for ( --i; i >= 0; i-- ) // 逆序输出字符即可
{
printf( "%c", result[i] );
}
printf("\n");
delete[] result;
}
void int2hex( int number )
{
int2other( number, HEX_LEN, 0xF, HEX_SHIFT );
}
void int2oct( int number)
{
int2other( number, OCT_LEN, 0x7, OCT_SHIFT );
}
void int2bin( int number)
{
int2other( number, BIN_LEN, 0x1, BIN_SHIFT );
}
int main()
{
int num = 123456789;
printf( "%d's hex is: ", num );
int2hex(num);
printf( "%d's oct is: ", num );
int2oct(num);
printf( "%d's bin is: ", num );
int2bin(num);
return 0;
}
// main output