printf二进制数据

来源:互联网 发布:天才小熊猫 知乎 编辑:程序博客网 时间:2024/05/18 03:47

基于之前这篇文章的代码改进了下: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 datafor(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);}


0 0
原创粉丝点击