C 语言实现matlab dec2bin功能,可实现数字转化成任意进制下的字符串,支持固定长度0填充补齐
//
// Created by cao on 2021/1/20.
//
#include <stdio.h>
#include<string.h>
void ltoa(long num, char* str, int radix,int len)
{
int i = 0;
int j = 0;
long sum;
unsigned long num1 = num; //如果是负数求补码,必须将他的绝对值放在无符号位中在进行求反码
char str1[33] = { 0 };
if (num<0) { //求出负数的补码
num = -num;
num1 = ~num;
num1 += 1;
}
if (num == 0) {
str1[i] = '0';
i++;
}
while(num1 !=0) { //进行进制运算
sum = num1 % radix;
str1[i] = (sum > 9) ? (sum - 10) + 'a' : sum + '0';
num1 = num1 / radix;
i++;
}
i--;
int real_len=i;
if(len>i)
{
for (i=len-1; i >= len-real_len-1; i--) { //逆序输出
str[i] = str1[j];
j++;
}
for (i=len-real_len-2; i >= 0; i--) {
str[i]='0';
}
}
else
{
for (i; i >= 0; i--) { //逆序输出
str[i] = str1[j];
j++;
}
}
}
int main()
{
char bit[32]={0};
//正常输出
ltoa(11,bit,2,4);
printf("%s\n",bit);
//最后的0非有效,按照实际长度输出
ltoa(11,bit,2,0);
printf("%s\n",bit);
//二进制输出,和matlab dec2bin函数对应
//dec2bin(11,8)
//ans =
// '00001011'
ltoa(11,bit,2,8);
printf("%s\n",bit);
//十进制输出
ltoa(1110,bit,10,16);
printf("%s\n",bit);
return 0;
}
运行结果
1011
1011
00001011
0000000000001110