Преобразование текста в шестнадцатиричный формат utf-8
Программа для общения с МК дисплея. Чтобы тот мог вывести какой-то текст необходимо каждую букву преобразовать в шестнадцатиричный формат: "я кот
" -> "044f 0020 043a 043e 0442
", и т.п..
Соответственно ТЗ:
- преобразовать любой текст заранее известного объема байтов в шестнадцатиричный формат;
- так как один символ состоит из двух байтов поместить значения байтов в разные ячейки массива, служащего выходным буфером;
- сократить по возможности код.
Из решений, что я находил везде используются какие-либо библиотеки, чего я делать категорически не желаю. Остановился на варианте и использованием switch
структуры, теоретически самый простой, но не самый красивый вариант, т.к. со всеми используемыми символами выйдет кейсов 150. Возможно я изобретаю велосипед, есть ли более грамотное решение?
//hpp
class Interface {
void control(void);
void hex_transform(const char[], unsigned char n_symb);
unsigned char text60bytes[60]; //массив для вывода текста на 30 символов
};
//cpp
#include "Interface.hpp"
extern Interface inter;
Interface inter;
void Interface::control(void) {
inter.hex_transform("Любя, съешь щипцы, — вздохнёт.", 30);
}
void Interface::hex_transform(const char text[], unsigned char n_symb) {
char letter;
for (unsigned char n_letter = 0; n_letter < n_symb; n_letter++){
letter = text[n_letter];
switch (letter){
case /*один из символов*/:
inter.text60bytes[2*n_letter - 1] = /*byte*/;
inter.text60bytes[2*n_letter] = /*byte*/;
break;
}
}
}