基于之前这篇文章的代码改进了下:http://blog.csdn.net/xzongyuan/article/details/28889063
之前打印的数字没有补0。我打印了内存信息,结果是这样的,不能对齐
为了对齐,要按字节长度打印,不足部分补0,而不是空格。本来想用printf打印字符串时,补0,但是打印%s时,不提供补0功能,所以我写了supplement_zero函数。
测试结果如下:
修改后,打印出来的数据就好看了
下面是测试代码,供参考
有时候,会打印出乱码,可能是把字符串的"\0"打印出来了,可以把printf限制为只打8个字符:printf("%.8s",buffer);
#include <stdio.h>
#include "string.h"
void decToBin(int num,char *buffer);
void supplement_zero(char *buffer);
void reOrder(char *buffer);
void printf_binary_byte(int num);
int main()
{ int decimalNum;
int base=2;
printf("Enter number in decimal:");
scanf("%d",&decimalNum);
// printf("Decimal%d:",decimalNum);
printf("binary format is : ");
printf_binary_byte(decimalNum);
printf("\n");
return 0;
}
void decToBin(int num, char *buffer)
{
if(num>0)
{
decToBin(num/2,buffer+1);
*buffer = (char)(num%2+48);
}
}
void reOrder(char *buffer)
{
int i;
char temp[8]={0};
for(i=0;i<4;i++)
{
temp[7-i]=*(buffer+i);
*(buffer+i)=*(buffer+7-i);
*(buffer+7-i)=temp[7-i];
}
}
void supplement_zero(char *buffer)
{
int i;
int len = (int)strlen(buffer);
//add '0' to buffer's blank data
for(i=len;i<8;i++)
{
*(buffer+i) = '0';
}
}
void printf_binary_byte(int num)
{
int i;
char buffer[8]={0};
decToBin(num,buffer);
supplement_zero(buffer);
reOrder(buffer);
printf("%8s",buffer);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)