二进制转十进制、八进制、十六进制
//二进制转十进制:
int bintodec(char* pbin)
{
char* temp = pbin;
int len = strlen(temp);
int binary = 0;
for (int i = 0; i < len; i++)
{
int n = temp[i] - '0';
binary += n << (len - 1 - i);// 超过int最大值的情况未处理
}
return binary;
}
// 二进制转八进制:
char* bintooct(char* pbin)
{
int bin = bintodec(pbin);
int len = strlen(pbin);
int temp = 0;
char* oct;
if (len % 3 != 0)
{
oct = new char[len/3 + 2];
for (int i = len/3; i >= 0; i--, bin>>=3)
{
temp = (bin & 07) + '0';
oct[i] = temp;
}
oct[len/3 + 1] = '\0';
}
else
{
oct = new char[len/3 + 1];
for (int i = len/3 - 1; i >= 0; i--, bin>>=3)
{
temp = (bin & 07) + '0';
oct[i] = temp;
}
oct[len/3] = '\0';
}
return oct;
}
// 二进制转十六进制,方法一:
char* bintohex(char* pbin)
{
int bin = bintodec(pbin);
int len = strlen(pbin);
int temp = 0;
char* hex;
if (len % 4 != 0)
{
hex = new char[len/4 + 2];
for (int i = len/4; i >= 0; i--, bin>>=4)
{
temp = (bin & 0x0F) ;
if (temp > 9)
{
temp += 7 + '0';// 大于9时,将10->A..15->F;
}
else
temp += '0';
hex[i] = temp;
}
hex[len/4 + 1] = '\0';
}
else
{
hex = new char[len/4 + 1];
for (int i = len/4 - 1; i >= 0; i--, bin>>=4)
{
temp = (bin & 0x0F) ;
if (temp > 9)
{
temp += 7 + '0';
}
else
temp += '0';
hex[i] = temp;
}
hex[len/4] = '\0';
}
return hex;
}
// 二进制转十六进制,方法二:
char* int2dex(int n)
{
char* Idex = new char[8*sizeof(int)+1];
char* temp = NULL;
int a = 0, b = 0;
do
{
b = n % 16;
n = n / 16;
++a;
if (b <= 9)
*Idex++ = b + '0';
else
*Idex++ = b + 7 + '0';
}while(n > 0);
*Idex = '\0';
temp = back(Idex - a);
delete [] Idex;
return temp;
}
int转二进制
char* itobs(int n)
{
int i;
static int size = 8 * sizeof(int);// 位 = 8*字节
char* bins = new char[size + 1];
for (i = size - 1; i >= 0; i--, n >>= 1)
bins[i] = (01 & n) + '0';
bins[size] = '\0';
return bins;
}
flotat转二进制
void show_float(float* n)
{
int* address = (int*)n;
unsigned int val = *address;
//int val = (int)*n;
int size = 8 * sizeof(float);
unsigned int temp = 0;
printf("%f = ", *n);
while (size--)
{
temp = val & 0x80000000;// 从高位开始判断,再左移
val <<= 1;
printf("%d", temp > 0 ? 1 : 0);
}
printf("\n");
}
其他的关于位操作的一些blog:
http://blog.youkuaiyun.com/haoni123321/article/details/7415498
http://blog.youkuaiyun.com/dijkstar/article/details/7420515