Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将数字转换为二进制_C - Fatal编程技术网

C 将数字转换为二进制

C 将数字转换为二进制,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;

我正在以一种特殊的形式将十进制转换为二进制,但当我试图将生成的二进制存储在一个数组位中时,如果我完成打印,它会在位数之后打印垃圾,这会导致函数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;
  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;
}