C 将保存在数组中的十进制数转换为保存在数组中的二进制数,反之亦然

C 将保存在数组中的十进制数转换为保存在数组中的二进制数,反之亦然,c,arrays,binary,decimal,C,Arrays,Binary,Decimal,我一直在研究把十进制数转换成二进制数的方法。但是,在示例中,我发现要转换的十进制数不在数组中。 例如: void decToBinary(int n) { // array to store binary number int binaryNum[32]; // counter for binary array int i = 0; while (n > 0) { // storing remainder in bi

我一直在研究把十进制数转换成二进制数的方法。但是,在示例中,我发现要转换的十进制数不在数组中。 例如:

void decToBinary(int n) 
{ 
    // array to store binary number 
    int binaryNum[32]; 

    // counter for binary array 
    int i = 0; 
    while (n > 0) { 

        // storing remainder in binary array 
        binaryNum[i] = n % 2; 
        n = n / 2; 
        i++; 
    } 
}

然而,在我的例子中,我有一个保存在数组uint8_t*(随机生成)中的十进制数,您如何将其传递给保存在数组中的二进制数?然后,如何将其传递回保存在数组中的十进制数?

您应该返回
binaryNum
,因为它是局部变量。但首先,您必须还原数组以获得精确的二进制数:

uint8_t * returArray;
returArray = malloc(sizeof(int) * i);

for(int j = i - 1, k = 0; j >= 0; j--, k++) {
    returArray[j] = binaryNum[k];
}
该功能变为:

uint8_t * decToBinary(int n, int *size) 
{ 
    // array to store binary number 
    int binaryNum[32];
    uint8_t * returArray;

    // counter for binary array 
    int i = 0; 
    while (n > 0) { 

        // storing remainder in binary array 
        binaryNum[i] = n % 2; 
        n = n / 2; 
        i++; 
    } 

    returArray = malloc(sizeof(int) * i);
    if (!returArray)
       // handle error;

    for(int j = i - 1, k = 0; j >= 0; j--, k++) {
        returArray[j] = binaryNum[k];
    }
    *size = i;
    return returArray;
}
size
value是二进制数组的大小

测试的主要目的是:

int main(void) {
    int size;
    uint8_t * a = decToBinary(25, &size);
    printf("size = %d\n", size);
    for (int i = 0; i < size; ++i)
    {
        printf("%d", a[i]);
    }
    free(a);
    return 0;
}
用于转换数组中所有值的更新:

uint8_t * converAll(int * decimalArr, int size, int *new_size) {
    uint8_t * returArray = malloc(sizeof(uint8_t));
    if(! returArray) {
        // handle error
    }
    int bsize;
    int temp = 0, k = 0;
    for (int i = 0; i < size; ++i)
    {
       uint8_t *arr = decToBinary(decimalArr[i], &bsize);
       returArray = realloc(returArray ,sizeof(uint8_t) * (bsize + temp));
       if(! returArray) {
        // handle error
       }
       for (int j = 0; j < bsize; j++) {
            returArray[k] = arr[j];
            k++;
       }
       temp += bsize;
    }
    *new_size = k;

    return returArray;
}


在我的例子中,我没有直接收到十进制数n,因为我将十进制数存储在数组中。函数如何改变这一点?您想转换输入数组中的所有十进制数还是数组中的一个值?例如,如果我有包含{3,6,3,8,9,4}的数组x,我想获得二进制1011000110110,在main中声明数组并将其作为参数传递,以避免malloc/free。@Marc您可以创建包含循环内容的函数,用于连接所有二进制文件
uint8_t * converAll(int * decimalArr, int size, int *new_size) {
    uint8_t * returArray = malloc(sizeof(uint8_t));
    if(! returArray) {
        // handle error
    }
    int bsize;
    int temp = 0, k = 0;
    for (int i = 0; i < size; ++i)
    {
       uint8_t *arr = decToBinary(decimalArr[i], &bsize);
       returArray = realloc(returArray ,sizeof(uint8_t) * (bsize + temp));
       if(! returArray) {
        // handle error
       }
       for (int j = 0; j < bsize; j++) {
            returArray[k] = arr[j];
            k++;
       }
       temp += bsize;
    }
    *new_size = k;

    return returArray;
}

int arr[] = {3,6,3,8,9,4};
uint8_t * a = converAll(arr, 6,  &size);