将数字转换为二进制

时间:2014-05-02 10:49:53

标签: c

我将一个十进制转换为一个特殊形式的二进制,但是当我尝试存储二进制生成的二进制数据后,如果我打印出来就打印出来的打印尺寸为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

1 个答案:

答案 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;
}