【问题标题】:Convert decimal to binary and return array将十进制转换为二进制并返回数组
【发布时间】:2013-09-18 16:43:55
【问题描述】:

可能有一种聪明的方法可以做到这一点,但无论如何我都会出错:

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

    return bin;

}

在模线上。为什么 ? 还有什么更好的方法让它进入数组?

【问题讨论】:

  • 使用按位运算符打印二进制连线:读取:Decimal to Binary: Size independent
  • 我不熟悉objective c,但是指针不应该在使用前初始化吗?在纯 C 语言中,您必须通过向其传递数组或 (m|c|?)alloc() 函数来初始化指针...
  • int *bin 更改为int bin[sizeof(int) + 1。将一个点设置为buf 的末尾并向后填充,每一步递减指针。
  • 我认为它与 objC 无关,它只是一个 C 指针。但我确实尝试过初始化它,但仍然出错。如果我设置 :b[1] 而不是零,它不会崩溃。

标签: objective-c c


【解决方案1】:

声明

int *bin;

为指针留出空间,但不使其指向对象。在使用之前初始化bin 至关重要。
要解决您的问题,您可以在调用函数 (int main) 中声明一个数组 bin[4],然后将 *bin 传递给您的调用函数。

【讨论】:

  • @Curnelious;更新了我的答案。
【解决方案2】:

以下代码改编This answer,用于说明如何以二进制格式打印整数。 将“二进制数字”存储到 int 数组中添加到以下代码中:

#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;
}

【讨论】:

    猜你喜欢
    • 2016-12-25
    • 2017-01-13
    • 2020-03-28
    • 2016-12-25
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2012-06-26
    • 2017-01-31
    相关资源
    最近更新 更多