c语言任何进制的转换问题

2024-12-30 13:38:07
推荐回答(1个)
回答1:

#define M sizeof(unsigned int)*8 定义这个4*8的长度是用来保存单个unsigned int的32个位的,因为转换成2进制的长度最长,是32位

static char digits[]="0123456789ABCDEF";这句不懂.
这句定义了16进制数的每个数位上可能出现的数,2进制中的0和1也包含在内,3进制中的0,1,2也包含在内...所以2-16进制中数位上可能出现的数都在这里面了

char buf[M+1];这里为什么要M+1啊
字符串最后有个结尾字符'\0',虽然不显示出来,但要占1个字符位,这个buf用来保存二进制数的字符串的,最后需要用'\0'来结束这个字符串,所以要比32多1来存放32个位上的字符和最后的'\0'

i应该是sizeof(scale)/sizeof(scale[0])
sizeof(scale)就是数组scale总的字节数,sizeof(scale[0])是scale每个元素的字节数,结果就是scale中的元素个数

buf[i]='\0';这里是干什么的.
buf[i]='\0',因为i=M,所以buf[32]='\0',把字符串最后一个字符置为'\0',是字符串的结尾字符

buf[--i]=digits[n%d];这样不是把最低位放到最高位去了吗
因为i初始化为32,所以最低位还是在最后边的,最低位是buf[31],最高位是buf[0]

for (j=0;(s[j]=buf[i])!='\0';j++,i++);
return j;
} 这个循环有什么用,i,j分别代表什么.
这个循环把buf的内容复制给s,并且计算出s中的字符个数作为返回值,如果s是空字符串,也就是只有一个'\0'字符的话,j就是0