C 将数字转换为二进制
我正在以一种特殊的形式将十进制转换为二进制,但当我试图将生成的二进制存储在一个数组位中时,如果我完成打印,它会在位数之后打印垃圾,这会导致函数binary to decimal出现很多问题,该函数要求输入为1和0的字符数组类型。 问题 1为什么打印错误的尺寸 2为什么显示垃圾 3为什么输出仅显示初始化位 该值的输入为4C 将数字转换为二进制,c,C,我正在以一种特殊的形式将十进制转换为二进制,但当我试图将生成的二进制存储在一个数组位中时,如果我完成打印,它会在位数之后打印垃圾,这会导致函数binary to decimal出现很多问题,该函数要求输入为1和0的字符数组类型。 问题 1为什么打印错误的尺寸 2为什么显示垃圾 3为什么输出仅显示初始化位 该值的输入为4 void toGolomb(int value) { char out[20]; char bits[8]; int count=0,num=0, output;
void toGolomb(int value) {
char out[20];
char bits[8];
int count=0,num=0, output;
while(value>0) {
int remainder=value%2;
out[count]=(char)(((int)'0')+remainder);
value=value/2;
count++;
}
int amount=count-1;
int i;
for(i=0;i<=amount;i++) {
bits[num]=(char) '1';
num++;
}
if(amount>=0) {
out[amount]='0';
for(i=amount;i>=0;i--){
bits[num]=(char) out[i];
num++;
}
} else {
bits[num]=(char) '1';
num++;
}
if(comflag==0) {
int a =strlen(bits);
printf(" length is %d \n",a);
printf("%s\n",bits);
output= binary_decimal(bits);
fputc(output,stdout);
}
}
#包括
#包括
#包括
//http://en.wikipedia.org/wiki/Golomb_coding
字符*b(int值){
静态常数int m=4,rbits\u len=2;//rbits\u len=log 2 m
静态常量字符*rbits[]={“00”、“01”、“10”、“11”};
字符*位;
div_t x=div(值m);
位=malloc(x.quot+1+rbits_len+1);
memset(位'0',x.quot);
位[x.quot]=“1”;
memcpy(位+x.quot+1,rbits[x.rem],rbits_len+1);
返回位;
}
int main(){
int i;
对于(i=0;i这里是二进制\十进制()?字符位[8];
。8不是太小了一点吗?你忘了0终止吗?另外,避免强制转换:只在必要的地方使用。@Deduplicator最初没有强制转换,我只是把它放在这里,以确保它没有错。我如何做0-termination@UmNyobe我最多需要8位,即使我把它设为20位,它仍然会给出error@hsdhillon使用字符位[9];
。二进制后十进制强制空终止:位[8]=0;
length is 17
111000c�����>�
205
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//http://en.wikipedia.org/wiki/Golomb_coding
char *toGolomb(int value){
static const int m = 4, rbits_len = 2;//rbits_len = log 2 m
static const char *rbits[] = {"00", "01", "10", "11"};
char *bits;
div_t x = div(value, m);
bits = malloc(x.quot + 1 + rbits_len + 1);
memset(bits, '0', x.quot);
bits[x.quot] = '1';
memcpy(bits + x.quot + 1, rbits[x.rem], rbits_len+1);
return bits;
}
int main(){
int i;
for(i=0;i<=10;++i){
char *bits = toGolomb(i);
printf("%d:%s\n", i, bits);
free(bits);
}
return 0;
}