nb Я знаю, что этот вопрос задавался ранее в StackOverflow различными способами и обстоятельствами, но поиск ответа, который я ищу, не совсем помогает моему конкретному случаю.Поэтому, хотя изначально это выглядит как копия вопроса, такого как Как я могу преобразовать целое число в шестнадцатеричную строку в C? данные ответы точны, но бесполезны для меня.
Мой вопрос заключается в том, как преобразовать десятичное целое число в шестнадцатеричную строку вручную.Я знаю, что есть некоторые хитрости с stdlib.h и printf, но это задача колледжа, и мне нужно сделать это вручную (приказ профессора).Однако нам разрешено обращаться за помощью.
Использование старого доброго "деления на 16 и преобразования остатка в шестнадцатеричное и обратного значения" метод получения шестнадцатеричной строки, но здесь необходимобыть большой ошибкой в моем коде, так как он не возвращает меня, например, "BC" для десятичного значения "188".
Предполагается, что алгоритму НИКОГДА не потребуется находить шестнадцатеричные значения для десятичных чисел большего размера.чем 256 (или FF).Хотя передача параметров может быть неоптимальной или нежелательной, это то, что нам сказали использовать (хотя мне разрешено изменять функцию getHexValue, поскольку я сам ее написал).
Это то, что ядо сих пор:
/* Function to get the hex character for a decimal (value) between
* 0 and 16. Invalid values are returned as -1.
*/
char getHexValue(int value)
{
if (value < 0) return -1;
if (value > 16) return -1;
if (value <= 9) return (char)value;
value -= 10;
return (char)('A' + value);
}
/* Function asciiToHexadecimal() converts a given character (inputChar) to
* its hexadecimal (base 16) equivalent, stored as a string of
* hexadecimal digits in hexString. This function will be used in menu
* option 1.
*/
void asciiToHexadecimal(char inputChar, char *hexString)
{
int i = 0;
int remainders[2];
int result = (int)inputChar;
while (result) {
remainders[i++] = result % 16;
result /= (int)16;
}
int j = 0;
for (i = 2; i >= 0; --i) {
char c = getHexValue(remainders[i]);
*(hexString + (j++)) = c;
}
}
char *hexString
- это указатель на строку символов, которую мне нужно вывести на экран (в конце концов).Параметр char inputChar
, который мне нужно преобразовать в шестнадцатеричный формат (поэтому мне никогда не нужно преобразовывать значения свыше 256).
Если есть лучший способ сделать это, в котором все еще используется функция void asciiToHexadecimal(char inputChar, char *hexString)
Я все уши, кроме этого, моя отладка, кажется, указывает, что значения в порядке, но вывод получается как \377
вместо ожидаемого шестнадцатеричного буквенно-цифрового представления.
Извините, если есть какая-либо терминология илидругие проблемы с самим вопросом (или с кодом), я все еще очень плохо знаком с миром C.
Обновление: Мне только что пришло в голову, что это может иметь отношение к записиспособ, которым я показываю значение в случае, если это печать, а не преобразование, которое является ошибочным.Вот оно:
char* binaryString = (char*) malloc(8);
char* hexString = (char*) malloc(2);
asciiToBinary(*(asciiString + i), binaryString);
asciiToHexadecimal(*(asciiString + i), hexString);
printf("%6c%13s%9s\n", *(asciiString + i), binaryString, hexString);
(все в этом коде работает, кроме hexString
)