В настоящее время у меня есть код для преобразования указателя char, который содержит двоичные символы, и преобразует их в шестнадцатеричные и восьмеричные представления.
Как продвигался мой код, теперь у меня есть целое двоичное число, это больше не указатель на символ, но я все еще хочу преобразовать его в шестнадцатеричный или восьмеричный.
Итак, код, который у меня есть, преобразует: «1101» в шестнадцатеричный или восьмеричный эквивалент, но в настоящее время у меня есть 1101 как целочисленное значение, но я все еще хочу преобразовать его в шестнадцатеричный или восьмеричный.
Я не знаю, как переписать код, чтобы он принимал целочисленный двоичный файл в качестве аргумента вместо двоичного char *. Или как изменить int, который у меня есть, на указатель char, чтобы он мог успешно пройти функцию преобразования.
Вот код вызова функции, который current работает с указателем char на двоичное представление числа, преобразуя его в восьмеричное или шестнадцатеричное представление:
output = binaryBaseChange(output, 3); //for binary to octal conversion
output = binaryBaseChange(output, 4); //for binary to hex conversion
Вот функция преобразования, использующая аргумент char * bin:
char * binaryBaseChange (char * bin, int size_of_digit) {
int offset = 0;
int i = 0;
int j = 4;
int k = 0;
int number_of_hex_digits = 0;
char* substr;
char * out;
int r = 0;
while(((strlen(bin) + offset) % size_of_digit) != 0) {
offset++;
}
out = malloc((strlen(bin) + offset) / size_of_digit+1);
out[(strlen(bin)+offset)/size_of_digit] = '\0';
r = (int)strlen(bin) + offset;
bin = pad_bin(bin, r);
number_of_hex_digits = (int)strlen(bin)/size_of_digit;
while (k < number_of_hex_digits) {
substr = strndup(bin+i, j);
substr[size_of_digit] = '\0';
i = i + size_of_digit;
j = j + size_of_digit;
if (size_of_digit == 4) {
out[k] = single_digit_bin_to_hex(substr);
} else if (size_of_digit == 3) {
out[k] = single_digit_bin_to_oct(substr);
}
free(substr);
k++;
}
free(bin);
out[k] = '\0';
return out;
}
Вот функции, вызываемые внутри функции преобразования:
char single_digit_bin_to_oct (char * bin_dig) {
if (strcmp(bin_dig, "000") == 0) {
return '0';
} else if (strcmp(bin_dig, "001") == 0) {
return '1';
} else if (strcmp(bin_dig, "010") == 0) {
return '2';
} else if (strcmp(bin_dig, "011") == 0) {
return '3';
} else if (strcmp(bin_dig, "100") == 0) {
return '4';
} else if (strcmp(bin_dig, "101") == 0) {
return '5';
} else if (strcmp(bin_dig, "110") == 0) {
return '6';
} else {
return '7';
}
}
char single_digit_bin_to_hex (char *bin_dig) {
if (strcmp(bin_dig, "0000") == 0) {
return '0';
} else if (strcmp(bin_dig, "0001") == 0) {
return '1';
} else if (strcmp(bin_dig, "0010") == 0) {
return '2';
} else if (strcmp(bin_dig, "0011") == 0) {
return '3';
} else if (strcmp(bin_dig, "0100") == 0) {
return '4';
} else if (strcmp(bin_dig, "0101") == 0) {
return '5';
} else if (strcmp(bin_dig, "0110") == 0) {
return '6';
} else if (strcmp(bin_dig, "0111") == 0) {
return '7';
} else if (strcmp(bin_dig, "1000") == 0) {
return '8';
} else if (strcmp(bin_dig, "1001") == 0) {
return '9';
} else if (strcmp(bin_dig, "1010") == 0) {
return 'A';
} else if (strcmp(bin_dig, "1011") == 0) {
return 'B';
} else if (strcmp(bin_dig, "1100") == 0) {
return 'C';
} else if (strcmp(bin_dig, "1101") == 0) {
return 'D';
} else if (strcmp(bin_dig, "1110") == 0) {
return 'E';
} else if (strcmp(bin_dig, "1111") == 0){
return 'F';
} else {
fprintf(stderr, "ERROR");
return 'X';
}
}
char * pad_bin (char * bin, int n) {
int bin_len = (int)strlen(bin);
int dif = n - bin_len;
char * new_bin = malloc(n + 1);
int i = 0;
int j = 0;
memset(new_bin,0,n+1);
if (n == 0) {
return bin;
} else for (;i <= n; i++) {
if (i < dif) {
new_bin[i] = '0';
} else {
new_bin[i] = bin[j];
j++;
}
}
return new_bin;
}
int to binary string
? Например,12 -> "1100"
- person BLUEPIXY   schedule 06.07.2015sprintf(binstr, "%d", intbin);
- person BLUEPIXY   schedule 06.07.2015} else if (strcmp(bin_dig, "0011") == 0) { return '3'; }
, в вашем коде выше. - person Jonathan Leffler   schedule 06.07.2015