Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.10. Загрузка и сохранение данных блока
А.5.10.8. rdsWriteHexText – запись блока двоичных данных в текстовом формате
Функция rdsWriteHexText добавляет к данным, сохраняемым блоком в текстовом формате, строку в двойных кавычках, представляющую собой записанные последовательно шестнадцатеричные значения байтов указанной области памяти.
void RDSCALL rdsWriteHexText( LPVOID Data, // Указатель на начало области памяти int Size, // Размер области памяти int MaxWidth // Число символов в строке );
Тип указателя на эту функцию
RDS_VpVII
Параметры
- Data (LPVOID)
- Указатель на начало области памяти, в которой находятся записываемые данные.
- Size (int)
- Размер записываемых данных в байтах.
- MaxWidth (int)
- Число символов в шестнадцатеричной записи, после которого нужно перевести строку, добавив символ продолжения «+» и продублировав двойные кавычки, или 0, если строки переводить не нужно.
Примечания
Эта функция может вызываться только из функции модели блока в момент реакции на события записи данных блока в текстовом формате RDS_BFM_SAVETXT, во всех остальных случаях вызов игнорируется. Она добавляет строку с шестнадцатеричными кодами к общему набору текстовых данных блока. После завершения реакции на событие RDS_BFM_SAVETXT этот набор будет записан в файл или буфер обмена (в зависимости от того, для чего сохраняются данные блока). Перед строкой всегда добавляется пробел.
Чаще всего функция rdsWriteHexText используется для того, чтобы в текстовом формате записать массив каких-либо двоичных данные, не разбирая их структуру. Каждый байт области памяти Data функция переводит в два шестнадцатеричных символа, записывает эти пары символов друг за другом и окружает строку двойными кавычками. Если значение параметра MaxWidth не нулевое (в текущей версии RDS значение MaxWidth, меньшее пяти, будет эквивалентно нулевому), то функция, сформировав строку из MaxWidth символов, закроет кавычку, добавит символ «+», переведет строку, добавит еще один символ «+», потом снова откроет кавычку и продолжит запись (в текстовом формате RDS допускается таким образом переносить длинный текст на следующую строку файла).
Для чтения такой строки шестнадцатеричных кодов в заданную область памяти при загрузке данных блока следует использовать функцию rdsReadHexText.
Пример
Следующий фрагмент программы запишет в данные блока строку из последовательно возрастающих шестнадцатеричных кодов:
int maxchars=0; BYTE array[20]; for(int i=0;i<20;i++) // Массив возрастающих байтов array[i]=i; // Запись массива rdsWriteHexText(array,20,maxchars);
В результате ее работы в данные блока добавится пробел и следующий текст:
"000102030405060708090A0B0C0D0E0F10111213"
Если заменить в первой строчке программы «maxchars=0» на «maxchars=15», в сохраненные данные блока добавится текст
"0001020304050"+ +"60708090A0B0C"+ +"0D0E0F1011121"+ +"3"
Каждая строка в этом тексте, исключая символы продолжения «+», не длиннее 15 символов. При чтении данных блока такая разбитая строка будет автоматически собрана.
См. также