2014-02-08 4 views
0

Я ищу предложения о том, как форматировать двоичное число, чтобы после каждой четвертой цифры было пробел. У меня есть программа C, которая преобразует десятичное число в двоичное, но это только дает длинную строку без пробелов, как «10000000», и я хочу, чтобы это было «1000 0000»Форматирование двоичного числа

EDIT: вот код

1 #include "binary.h" 
    2 
    3 char* binary(int num) 
    4 { 
    5 int i, d, count; 
    6 char *pointer; 
    7 
    8 count = 0; 
    9 pointer = (char*)malloc(32+1); 
10 
11 if(pointer == NULL) 
12  exit(EXIT_FAILURE); 
13 
14 for (i = 31; i >= 0; i--) 
15 { 
16  d = num >> i; 
17 
18  if (d & 1) 
19   *(pointer + count) = 1 + '0'; 
20  else 
21   *(pointer + count) = 0 + '0'; 
22 
23  count++; 
24  } 
25  *(pointer+count) = '\0'; 
26 
27  return pointer; 
28 } 
+0

Покажите, как вам генерировать то, что у вас есть * сейчас * (строка цифр). – WhozCraig

+0

Обновлено. спасибо – user3000731

ответ

0

Ну одним способом является преобразование этого двоичного числа в строковую переменную, а затем вы помещаете пробел между каждой четвертой и пятой цифрой. Here - подсказка, как преобразовать int в строку.

1

Попробуйте эти изменения:

Изменить таНос на:

pointer = malloc(32+7+1); /* 32 digits + 7 spaces + null */ 

и добавьте следующее в ваш петли прямо перед count++;:

/* if i is non-zero and a multiple of 4, add a space */ 
if (i && !(i & 3)) { 
    count++; 
    *(pointer + count) = ' '; 
} 
0
#include <stdio.h> 
#include <string.h> 

void 
printbin(unsigned v) 
{ 
    size_t e = sizeof(v) * 10; 
    char s[e+1]; 

    s[e--] = 0; 

    for (; v || e % 5; v >>= 1) { 
     if (e % 5 == 0) s[e--] = ' '; 
     s[e--] = (v & 1) ? '1' : '0'; 
    } 

    printf("%s\n", &s[e+1]); 
} 
+0

http://stackoverflow.com/questions/11644362/bitwise-operation-on-sign-integer – user3125367

0
#include <limits.h> 

char* binary(int num){ 
    int i, count, bits = sizeof(num)*CHAR_BIT; 
    char *pointer = malloc(bits + (bits/4 -1) + 1);//for bit, for space, for EOS 

    if(pointer == NULL){ 
     perror("malloc at binary"); 
     exit(EXIT_FAILURE); 
    } 

    count = 0; 
    for (i=bits-1; i >= 0; i--){ 
     pointer[count++] = "01"[(num >> i) & 1]; 
     if(i && (count+1) % 5 == 0) 
      pointer[count++] = ' '; 
    } 
    pointer[count] = '\0'; 

    return pointer; 
} 
Смежные вопросы