我将一个十进制转换为一个特殊形式的二进制,但是当我尝试存储二进制生成的二进制数据后,如果我打印出来就打印出来的打印尺寸为8在没有位之后的垃圾会导致函数二进制到十进制的许多问题,它希望输入是1' s和0' s的char数组类型。 问题 1为什么它打印错误的大小 2为什么它显示垃圾 3为什么out只显示初始化的位
该值的输入为4
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);
}
}
输出:
length is 17
111000c�����>�
205
答案 0 :(得分:0)
#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;
}