2013-09-18 2 views
-1

возможно есть умный способ сделать это, но в любом случае я получаю ошибку на этом:Преобразование десятичной в двоичную и возвращать массив

-(int*)decimalBinary:(int)decimal 
{ 
    int i=0; 
    int *bin; 
    while (decimal!=0) 
    { 
     bin[i]=decimal%2; 
     decimal=decimal/2; 
     i++; 
    } 

    return bin; 

} 

по модулю линии. Зачем ? И какой лучший способ получить массив?

+0

печати двоичного использование Теста битовые операторы: читают: [Decimal в Binary: Размер независимого] (HTTP: // StackOverflow. com/questions/14104208/convert-integer-to-binary-and-store-it-in-integer-array of of-defined-sizec/14314522 # 14314522) –

+5

Я не знаком с объективом c, но shouldn 'Указатель должен быть инициализирован перед использованием? В простой C вам нужно будет инициализировать указатель либо передав ему массив, либо функции (m | c |?) Alloc() ... – ppeterka

+0

Измените 'int * bin' на' int bin [sizeof (int) + 1'. Установите точку до конца 'buf' и залейте назад, уменьшая указатель на каждом шаге. – chux

ответ

0

Декларирование

int *bin; 

резервирует пространство для указателя, но не делает это указывает на объект. Крайне важно инициализировать bin перед его использованием.
Чтобы решить вашу проблему, вы можете объявить массив bin[4] в функции вызывающего абонента (int main), а затем передать *bin вашей вызывающей функции.

+0

инициализация не решает мою проблему. – Curnelious

+0

@Curnelious; Обновлен мой ответ. – haccks

0

Следующий код приспособлен от This answer о том, как напечатать целое число в двоичном формате. Сохранения "двоичные разрядов" в целочисленном массив является добавлен в код ниже:

#include <stdio.h>  /* printf */ 
#include <stdlib.h>  /* strtol */ 

const char *byte_to_binary(long x); 

int main(void) 
{ 
    long lVal; 
    int i, len, array[18]; 
    char buf[18]; 

    { /* binary string to int */ 
     char *tmp; 
     char *b = "11010111001010110"; 

     lVal=strtol(b, &tmp, 2); //convert string in "base 2" format to long int 
     printf("%d\n", lVal); 
    } 
    { 
     printf("%s", byte_to_binary(lVal)); 
     /* byte to binary string */ 
     sprintf(buf,"%s", byte_to_binary(lVal)); 
    } 
    len = strlen(buf); 
    for(i=0;i<len;i++) 
    { //store binary digits into an array. 
     array[i] = (buf[i]-'0');  
    } 
    getchar(); 
    return 0; 
} 

const char *byte_to_binary(long x) 
{ 
    static char b[17]; //16 bits plus '\0' 
    b[0] = '\0'; 
    char *p = b; 

    int z; 
    for (z = 65536; z > 0; z >>= 1) //2^16 
    { 
     *p++ = (x & z) ? '1' : '0'; 
    } 
    return b; 
} 
Смежные вопросы