在我們日常的編程中,有時候需要格式化輸出一個整形數據的二進制,但是在我們C語言中隻有輸出十進制:%d;輸出十六進制:%x;輸出單個字符:%c;輸出字符串:%s;輸出變量所在的地址:%p;而并沒有這種二進制對應的格式,所以需要我們手動來實現。
2.源碼實現本篇博客給大家介紹兩種方法:1.通過庫函數itoa,需要包含頭文件:#include <stdlib.h>;2.通過十進制轉成二進制的常用方法——短除法;為方便大家使用,将兩種方法都封裝成了函數,源碼如下:
#include <stdio.h>
#include <stdlib.h>
#define uint32 unsigned int
#define uint8 unsigned char
void FuncOutputBin(uint32 value)
{
char string[33]; //形參類型uint32最大為32位,因此我這裡定義了大小為33的字符串數組存放
itoa(value, string, 2);
printf("庫函數得到的二進制為:%s\r\n",string);
}
//用短除法的思想得到二進制,之後将數據從後往前讀取
void ShortDivOutputBin(uint32 input)
{
uint8 temp[33] = {0};
int i = 0;
printf("短除法得到的二進制為:");
while(input)
{
temp[i] = input % 2; //取餘數存放到數組中,此為得到的二進制數
input = (uint32)input / 2; //短除,while中判斷是否除盡
i ; //存儲了一個二進制數,自加存儲下一個
}
for(i--; i>=0; i--) //由于最後一次input為0無效,i還是自加了,因此最後一次自加的值是無用的,所以先自減,然後将餘數從後往前讀取
{
printf("%d",temp[i]);
}
printf("\r\n");
}
void main(void)
{
uint32 input = 0;
printf("請輸入一個需要轉化為2進制的整形數據:");
scanf("%d", &input);
FuncOutputBin(input);
ShortDivOutputBin(input);
}
itoa函數原型:char *itoa( int value, char *string,int radix)功能:将整形數據value轉化成需要的進制radix,然後将之以字符串的形式存放在string中;返回值:轉化成對應進制後的字符串的地址,也可以不使用返回值;它的三個參數依次為:value:需要轉化的整形數據;string:轉化成對應進制後的字符串的地址;radix :需要轉化的進制(我這裡需要轉化為2進制,所以填2);
3.結果展示(有圖有真相咯~)
放在最後,喜歡作者的歡迎關注我們的公衆号"腦補空間”,會為大家推送更多推文~
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!