Как преобразовать в двоичный файл в виде строки в коде C - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь преобразовать int в двоичный файл как строку, но не могу.Пожалуйста, помогите мне.Как преобразовать целое число в двоичное, скажите, пожалуйста.

Input: 32
Output: 00100000

Мой код:

#include <stdio.h>
#include <string.h>
char converttobinary(int n)
{
    int i;
    int a[8];
    char op;
    for (i = 0; i < 8; i++)
    {
        a[i] = n % 2;
        n = (n - a[i]) / 2;
    }
    for (i = 7; i >= 0; i--)
    {
        op = strcat(op, a[i]);
    }
    return op;
}
int main()
{
    int n;
    char str;
    n = 254;
    str = converttobinary(n);
    printf("%c", str);
    return 0;

}

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Я пытался изменить ваше решение с минимальными изменениями, чтобы оно работало.Существуют элегантные решения для преобразования Integer в двоичные, например, с помощью операторов сдвига.

Одной из основных проблем в коде было использование символа вместо массива символов.т.е. char str; вместо char str[SIZE]; Также вы выполняли строковые операции над одним символом.Кроме того, заголовочный файл iostream предназначен для C ++.

Существует много улучшений в решении, опубликованном ниже (я только заставил ваш код работать с минимальными изменениями).

Я предлагаю укрепить ваши основы языка Си и снова подойти к этой проблеме.

#include <stdio.h>
#include <string.h>

void converttobinary(int n, char *op)
{
    int i;
    int a[8];
    for (i = 0; i < 8; i++)
    {
        a[i] = n % 2;
        n = (n - a[i]) / 2;
    }
    for (i = 7; i >= 0; i--)
    {
        op[i]=a[i];
    }

}
int main()
{
    int n,i;
    char str[8];
    n = 8;
    converttobinary(n,str);
    for (i = 7; i >= 0; i--)
    {
        printf(" %d ",str[i]);
    }
    return 0;

}
0 голосов
/ 10 июля 2019

Я немного модифицирую ваш код, чтобы сделать то, что вы хотите, результат этого кода с

n = 10

это

00001010

В этом коде я сдвигаю биты n позиций импульса и сравниваю, есть ли в этой позиции 1 или 0, и пишу '1', если есть 1, или '0', если у нас есть 0.

#include <stdio.h>
void converttobinary(int n, char op[8]){
    int auxiliar = n;
    int i;

    for (i = 0; i < 8; i++) {
        auxiliar = auxiliar >> i;
        if (auxiliar & 1 == 1){
            op[7-i] = '1';
        } else{
            op[7-i] = '0';
        }
        auxiliar = n;
    }

}

int main (void){
    int n = 10;
    int i;
    char op[8];

    converttobinary(n, op);

    for(i = 7; i > -1; i--){
        printf("%c",op[i]);
    }

    return 0;

}
0 голосов
/ 10 июля 2019
char *rev(char *str)
{
    char *end = str + strlen(str) - 1;
    char *saved = str;
    while(end > str)
    {
        int tmp = *str;
        *str++ = *end;
        *end-- = tmp;
    }
    return saved;
}

char *tobin(char *buff, unsigned long long data)
{
    char *saved = buff;

    while(data)
    {
        *buff++ = (data & 1) + '0';
        data >>= 1;
    }
    *buff = 0;
    return rev(saved);
}

int main()
{

    char x[128];
    unsigned long long z = 0x103;
    printf("%llu is 0b%s\n", z, tobin(x, z));

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...