Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.11. Разбор текста
А.5.11.6. rdsReadHexText – разбор шестнадцатеричного блока текста
Функция rdsReadHexText считывает шестнадцатеричный блок из переданного в параметрах текста и, преобразовав каждую пару шестнадцатеричных цифр в этом блоке в один байт, записывает эти байты последовательно в указанный буфер. Строка должна иметь кодировку UTF8.
int RDSCALL rdsReadHexText( RDSCSTR Start, // Начало текста (UTF8) RDSCSTR *pNextWord, // Возврат – конец описания (UTF8) LPVOID Buffer, // Буфер для записи int MaxSize // Размер буфера );
Тип указателя на эту функцию
RDS_ISpSpVI
Параметры
- Start (RDSCSTR)
- Указатель на начало текста. Пробелы и табуляции в начале текста будут пропущены.
- pNextWord (RDSCSTR*)
- Указатель на переменную типа char*, в которую будет записан указатель на начало следующего за шестнадцатеричным блоком слова строки Start. Если вызывающей программе не нужно знать начало следующего слова, в этом параметре можно передать NULL.
- Buffer (LPVOID)
- Указатель общего вида (void*) на заполняемый функцией буфер.
- MaxSize (int)
- Размер буфера, переданного в параметре Buffer (функция не станет писать в него больше MaxSize байтов).
Возвращаемое значение
Число байтов, фактически записанное в буфер.
Примечания
Эта функция извлекает из строки Start блок шестнадцатеричных данных и записывает его побайтно в буфер Buffer. Блок данных может быть заключен в кавычки, в этом случае функция будет автоматически обрабатывать знак продолжения «+», используемый в текстовом формате схем RDS – обнаружив его, она пропустит следующий за ним перевод строки и повторение знака продолжения, считая следующую строку текста продолжением текущей строки. Обычно функцией rdsReadHexText обрабатывают текст, записанный функцией rdsWriteHexText при сохранении данных блока – форматы данных этих двух функций полностью совместимы.
Функция запишет в буфер Buffer не более MaxSize байтов. Если шестнадцатеричный блок окажется длиннее (то есть будет содержать больше 2×MaxSize шестнадцатеричных цифр), лишние байты в конце блока будут потеряны. Функция пишет данные в буфер побайтно, то есть в результате выполнения программы
char *text=" \"ff2e1f\""; BYTE Buffer[3]; rdsReadHexText(text,NULL,Buffer,3);
в Buffer[0] будет записано значение 255 (0xff), в Buffer[1] – 46 (0x2e), а в Buffer[2] – 31 (0x1f).
Функция не поддерживает кодировку UTF16, поскольку текстовые данные блока всегда хранятся и передаются в модель в кодировке UTF8. Если необходимо считать данные из строки в UTF16, необходимо предварительно преобразовать ее функцией rdsUTF16toUTF8.
См. также