powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как передать ноль в Blob
14 сообщений из 14, страница 1 из 1
Как передать ноль в Blob
    #33707169
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используя библиотеку и пример по работе с Winsock winsock32.pbl (ссылочку на которые мне любезно предоставили на этом Форуме) у меня появилась вот такая проблема. Как известно, в функции отправки данных на сокет - uf_senddata из этой библиотеки одним из аргументов является blob (в нем то и передаются данные). Я формирую сообщение в бинарном виде, отправляю. Сторона-приемник сообщает, что сообщение имеет неверный формат. А именно, в отправленном мной сообщении отсутствуют нули, там где они должны были быть. Это видно на простом примере.
Скажем, нужно составить blob из значений 125, 0, 134. Чтобы составить такой blob я использую:

blob lbl_data
lbl_data = blob(char(123)+char(0)+char(125))

Если вывести lbl_data в messagebox
messagebox("",string(lbl_data))

То будет получено {}, т.е. 0 как бы "проглотился". А он в сообщении нужен, это число.

Подскажите, пожалуйста, как быть.
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33707416
Big Boo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в каком формате должно быть сообщение?
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33707658
Ленивка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нужен именно ноль то char(48)
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33707660
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)
Известные "грабли".
Воспользуйтесь функциями BlobEdit и BlobMid.
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33707698
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RenesansЕсли вывести lbl_data в messagebox
messagebox("", string (lbl_data))

вот этого делать нельзя ни в коем случае!
про zero terminated string слышали?


ИМХО, вместо BlobEdit лучше использовать RtlZeroMemory.
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33708787
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Big Boo (В каком формате сообщение?)
- я хочу сформировать TRAP сообщение в snmp (UDP) протоколе.

Ленивка (Если нужен именно ноль то char(48))
- char(48) вставит в blob значение 48, а мне нужно 0

AndrewN (Воспользуйтесь функциями BlobEdit и BlobMid.)
- Наверное, имеется в виду следующее - к имеющемуся blob-у с помощью blobedit добавить "нулевой" blob. Хорошо, но где взять этот самый нулевой блоб? Читать из файла не хочется.

Зорин Андрей (вот этого делать нельзя ни в коем случае!
про zero terminated string слышали?ИМХО, вместо BlobEdit лучше использовать RtlZeroMemory.)
С замечанием согласен. По использованию RtlZeroMemory дополнительный вопрос - Для ее использования нужен указатель на blob-переменную. Как его получить?
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33708887
Big Boo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RenesansBig Boo (В каком формате сообщение?)
- я хочу сформировать TRAP сообщение в snmp (UDP) протоколе.


А если более детально?
В нашем случае рассматриваем блоб просто как массив байт.
Какой размер блоба?
Какую информацию он должен содержать (побайтово)?
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33709024
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
snmp-уровень, привожу начало сообщения в 16-ричном формате

304502010004067075626с и т.д.

30 - точно не знаю xnj это такое, наверное это код snmp
45 - длина сообoения на этом уровне
02 - тип переменной (число) раздела версии протокола
01 - длина этой части
00 - номер версии (0)
04 - это тип переменной - string для community раздела
06 - длина
70 - это 'p' - первый символ от слова public
75 - u
62 - b
6c - l
и так далее. Все расписывать не вижу смысла. Так вот, когда отправлется номер версии - 0, в отправляемом сообщении о пропадает.
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33709771
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q. Как получить blob содержащий \x00 ?

A.
Код: plaintext
1.
2.
3.
4.
5.
Blob{ 4 } lbb_tmp
Blob{ 1 } lbb_zero

BlobEdit(lbb_tmp,  1 , Long( 0 ))
BlobEdit(lbb_zero,  1 , BlobMid(lbb_tmp,  1 ,  1 ) )

А дальше не сложно за пару минут написать объектик, позволяющий например такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
n_cst_blob b
b = Create n_cst_blob
b.of_AppendByte( 65 )
b.of_AppendByte( 0 )
b.of_AppendByte( 0 )
b.of_AppendByte( 65 )
lbb_data = b.of_GetBlob())
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33709888
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
 SUBROUTINE ZeroMemory( REF Blob lpVoid, ulong dwSize ) LIBRARY "kernel32.dll" ALIAS FOR "RtlZeroMemory"
Код: plaintext
1.
2.
Blob blb_zero
blb_zero=blob(' ')
ZeroMemory(blb_zero, 1 ) 
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33710109
Big Boo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyQ. Как получить blob содержащий \x00 ?

Код: plaintext
1.
2.
3.
4.
5.
Blob{ 4 } lbb_tmp
Blob{ 1 } lbb_zero

BlobEdit(lbb_tmp,  1 , Long( 0 ))
BlobEdit(lbb_zero,  1 , BlobMid(lbb_tmp,  1 ,  1 ) )



Хорошее решение. В билдере нет типа byte, а при попытке
преобразования blob(string_var) нулевой символ съедается строкой.
имхо действительно сообщение лучше формировать
с помощью blobEdit
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33710215
Renesans
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отлично! Анатолий Московский и Андрей Зорин, спасибо. Присланные вами рекомендации были ОЧЕНЬ полезные. Оба примера красивые, даже не знаю какой взять в проект! Но главное, сообщение удалось сформировать и оно корректно принялось другой стороной. Все. Это прорыв!

Спасибо всем за участие. Андрей, Вам особенно благодарен, не перестаю восхищаться Вашими знаниями и опытом.
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33710299
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RenesansОтлично! Анатолий Московский и Андрей Зорин, спасибо. Присланные вами рекомендации были ОЧЕНЬ полезные. Оба примера красивые, даже не знаю какой взять в проект! Но главное, сообщение удалось сформировать и оно корректно принялось другой стороной. Все. Это прорыв!

Спасибо всем за участие. Андрей, Вам особенно благодарен, не перестаю восхищаться Вашими знаниями и опытом.

BlobEdit и BlobMid сильно тормозят на больших блобах.
скорее всего где-то внутри по ходу дела куски копируются.
на небольших это незаметно, но на объемах в сотни килобайт - мегабайты разница может составлять сотни раз.
погоняйте профайлер чтобы убедиться что лучше.
...
Рейтинг: 0 / 0
Как передать ноль в Blob
    #33710354
Big Boo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе, нолик записать можно еще и так:
blobEdit(blobvar, position, char(0), EncodingANSI!)

Проверял, вроде работает.
Что касается скорости, то заголовок сообщения
можно формировать с помощью BlobEdit (он все равно маленький ), а остальной баян текстовый подтащить из строки
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как передать ноль в Blob
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]