我一直在研究将十进制数转换为二进制数的方法。但是在示例中,我发现要转换的十进制数不在数组内。例如:
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
,因为它是局部变量。但是首先,您必须将数组还原为确切的二进制数:
int * returArray;
returArray = malloc(sizeof(int) * i);
for(int j = i - 1, k = 0; j >= 0; j--, k++) {
returArray[j] = binaryNum[k];
}
该功能变为:
int * decToBinary(int n, int *size)
{
// array to store binary number
int binaryNum[32];
int * 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);
for(int j = i - 1, k = 0; j >= 0; j--, k++) {
returArray[j] = binaryNum[k];
}
*size = i;
return returArray;
}
size
值是二进制数组的大小。
主要测试对象:
int main(void) {
int size;
int * a = decToBinary(25, &size);
printf("size = %d\n", size);
for (int i = 0; i < size; ++i)
{
printf("%d", a[i]);
}
return 0;
}