Текущий раздел:

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.11. Разбор текста

А.5.11.6. rdsReadHexText – разбор шестнадцатеричного блока текста

# Приложения

## Приложение А. Функции, константы и структуры 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.

См. также

rdsWriteHexText.