2015-11-12 172 views
0

在这里,我已经创建了一个字符串,我存储数字的二进制值的字符串。我想将变量num的值存储到字符串。如何将变量的值存储到字符串数组?

我包含给定的十进制数的二进制数的长度。假设给定的数字是A = 6,我包含3,我需要一个字符串'结果'有'110'这是二进制值6 。

char* result = (char *)malloc((i)* sizeof(char)); 
i--; 
while(A>=1) 
    { 
     num=A%2; 
     result[i]=num; // here I need to store the value of num in the string 
     A=A/2; 
     i--; 
    } 
+2

通用警告:不要投)的malloc'结果('。 – fuz

+0

这些括号是什么?什么含有“我”?如果你想把一个数字转换成一个字符串,你必须明确地使用它,即使用'sprintf'或类似的方法。 – hexasoft

+0

我包含给定十进制数的二进制数的长度..假设给定的数字是A = 6,我包含3,我需要一个字符串'结果'具有'110',这是二进制值6。 –

回答

-1

你可以在<stdlib.h>使用这些功能:

itoa();或sprintf()

第二连杆具有一些实例中为好。

+0

请提及downvote的原因,以便我们改进答案。 –

+0

一个问题应该是自我包含的,链接应该只用于将信息添加到答案中,它们不应该是重要的。 – this

0

这似乎从你发布的代码是什么你正在尝试做的是打印一些二进制的固定精度。假设这就是你想要做的,就像

unsigned int mask = 1 << (i - 1);  
unsigned int pos = 0; 
while (mask != 0) { 
    result[pos] = (A & mask) == 0 ? '0' : '1'; 
    ++pos; 
    mask >>= 1; 
} 
result[pos] = 0; //If you need a null terminated string 

边缘案例留给读者作为练习。

0

我不确定具体是你要求什么。您是指写入字符串或将变量转换为字符串(即8)的数字的二进制表示(即00001000)?我会假设你是第一个。

要做到这一点,最简单的方法是重复测试至少显著位和值向右移(>>)。我们可以在for循环中做到这一点。但是,您需要知道您需要读取多少位。我们可以用sizeof来做到这一点。

int i = 15; 
for (int b = 0; b < sizeof(i); ++b) { 
    uint8_t bit_value = (i & 0x1); 
    i >>= 1; 
} 

那么我们如何将这个迭代转换为一个字符串呢?我们需要反向构建字符串。我们知道需要多少位,因此我们可以创建一个字符串缓冲区,并使用额外的字节来实现NULL终止。

char *buffer = calloc(sizeof(i) + 1, sizeof(char)); 

这样做是分配内存,sizeof(i) + 1元素长,每个元素都是sizeof(char),然后零的每个元素。现在让我们把这些位放入字符串中。

for (int b = 0; b < sizeof(i); ++b) { 
    uint8_t bit_value = (i & 0x1); 

    size_t offset = sizeof(i) - 1 - b; 
    buffer[offset] = '0' + bit_value; 

    i >>= 1; 
} 

那么这里发生了什么?在每次传递中,我们计算缓冲区中的偏移量,我们应该将其写入一个值,然后在将它写入缓冲区时,将0的ASCII值加到bit_value

此代码是未经测试,可能有一些问题,但毕竟是作为练习留给读者。如果您有任何问题,请告诉我!

0

这里是整个代码。它应该工作正常。

int i=0; 
int A;//supposed entered by user 

//calculating the value of i 
while(A!=0) 
{ 
    A=A/2; 
    i++; 
} 
char* result=(char *)malloc(sizeof(char)*i); 
i--; 
while(A!=0) 
{ 
    result[i]='0'+(A%2); 
    A=A/2; 
    i--; 
} 
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <limits.h> 

char *numToBinStr(int num){ 
    static char bin[sizeof(int) * CHAR_BIT + 1]; 
    char *p = &bin[sizeof(int) * CHAR_BIT];//p point to end 
    unsigned A = (unsigned)num; 

    do { 
     *--p = '0' + (A & 1); 
     A >>= 1; 
    }while(A > 0);//do-while for case value of A is 0 
    return p; 
} 

int main(void){ 
    printf("%s\n", numToBinStr(6)); 
    //To duplicate, if necessary 
    //char *bin = strdup(numToBinStr(6)); 
    char *result = numToBinStr(6); 
    char *bin = malloc(strlen(result) + 1); 
    strcpy(bin, result); 
    printf("%s\n", bin); 
    free(bin); 
    return 0; 
} 
相关问题