Так что, в основном, я пишу код для управления ЖК-дисплеем через микроконтроллер. (ATmega 32) У меня есть следующий в моем основном методе:Как преобразовать символ ASCII в шестнадцатеричный эквивалентный в C?
unsigned char str1[9] = "It Works!";
sendString(str1);
и вот мой метод sendString:
// Converts each char to hex and sends to LCD
void sendString(unsigned char *string){
sendCommand(0x01); // Clear screen 0x01 = 00000001
_delay_ms(2);
sendCommand(0x38); // Put in 8-bit mode
_delay_us(50);
sendCommand(0b0001110); // LCD on and set cursor off
_delay_us(50);
//For each char in string, write to the LCD
for(int i = 0; i < sizeof(string); i++){
convertASCIIToHex(string[i]);
}
}
Тогда метод sendString должен преобразовать каждый символ. Вот что у меня есть до сих пор:
unsigned int convertASCIIToHex(unsigned char *ch)
{
int hexEquivilent[sizeof(ch)] = {0};
for(int i = 0; i < sizeof(ch); i++){
// TODO - HOW DO I CONVERT FROM CHAR TO HEX????
}
return hexEquivilent;
}
Так как же я буду делать перевод? Я совершенно не знаком с C и медленно учусь. У меня такое чувство, что я все это делаю неправильно, поскольку где-то я читал, что char на самом деле хранится как 8-битный int. Как я могу заставить мой метод возвращать значение HEX для каждого входного символа?
ASCII-символ ARE alredy представлен численно внутри, поэтому вам не нужно их преобразовывать, если только вы не хотите выводить свои шестнадцатеричные значения вместо себя. (иногда мне очень сложно объяснить эту простую идею людям, которые вначале не понимают ее). –
Что такое «шестнадцатеричное значение»? – Michael
в порядке, поэтому в основном моя функция sendChar работает следующим образом: sendChar (0x54); и на ЖК-дисплее появляется связанный символ для ascii hex 0x54. Итак, если я понимаю вас, Евгений, я должен просто сделать следующее: sendChar (ch [i]) в цикле for для отправки каждого символа в моей «строке» на ЖК-дисплей? Нет необходимости конвертировать, поскольку char фактически представлен численно в 8 бит? –