39 / 2 / 1
Регистрация: 24.11.2012
Сообщений: 246
|
|
1 | |
Есть-ли функция подобная BlockRead только для буфера PBYTE?28.12.2017, 04:22. Показов 883. Ответов 11
Метки нет (Все метки)
Тип буфера PBYTE. Создаю его с помощью GetMem. Но читать из него приходится пачками с разными размерами, в такой-же тип буфера (PBYTE). Ну и важно знать сколько байт на самом деле прочиталось, и в какой позиции стою, после прочтения очередной пачки.
Интересует есть-ли готовая функция в Делфи, или придется свою писАть?
0
|
28.12.2017, 04:22 | |
Ответы с готовыми решениями:
11
В VB есть функция DoEvents, какая подобная функция есть в Delphi? А есть ли функция подобная inlist()? Есть ли для C# подобная компонента как для delphi АльфаСкинс есть ли подобная статистика у MSN |
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
|
|
28.12.2017, 10:05 | 2 |
Процедуре BlockRead абсолютно фиолетово в какой буфер читать. В чем у вас проблемы?
0
|
39 / 2 / 1
Регистрация: 24.11.2012
Сообщений: 246
|
|
28.12.2017, 12:51 [ТС] | 3 |
BlockRead читает из файла в буфер. А мне надо из буфера в буфер но кусками.
0
|
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
|
|
28.12.2017, 13:08 | 4 |
0
|
39 / 2 / 1
Регистрация: 24.11.2012
Сообщений: 246
|
|
28.12.2017, 14:12 [ТС] | 5 |
Пожалуйста, подкиньте примерчик со Stream? (а то не соображу как поисковик об этом спросить).
Меня интересует момент как загнать буфер в Stream (я надеюсь копировать байты не придется)?
0
|
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
|
||||||
28.12.2017, 15:08 | 6 | |||||
Смотрите:
1. У вас буфер pByte - это не буфер, а указатель на буфер. Т.е: myArray: Array of Byte; 2. Создаете TMemoryStream; 3.
0
|
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
|
||||||
28.12.2017, 15:12 | 7 | |||||
Для работы через указатель, вот код.
(Имхо, неудобнее, с точки зрения отладки, и требует дополнительных навыков, чтобы понимать что и как происходит)
0
|
39 / 2 / 1
Регистрация: 24.11.2012
Сообщений: 246
|
|
28.12.2017, 15:35 [ТС] | 8 |
Не, немного неверно я объяснил свой вопрос. Я не хочу заставлять программу перемещать-копировать байты из буфера в стрим.
Можно сделать все как-то через указатели? Т.е. чтобы буфер остался на месте, а при обращении к стриму, байты брались из буфера. У меня просто вечная проблема работы с именованием-разименованием этих указателей.
0
|
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
|
|
28.12.2017, 15:39 | 9 |
0
|
39 / 2 / 1
Регистрация: 24.11.2012
Сообщений: 246
|
|
28.12.2017, 15:44 [ТС] | 10 |
Ну тогда так.
Стрим состоит из буфера байт и служебных данных. Мои буфер это просто буфер. Я хочу присвоить буферу стрима не саму цепочку байт, а начальный адрес цепочки байт моего буфера. Тогда при обращении к стриму программа будет брать байты из моего буфера, а не из копии моего буфера - буфера стрима. Ведь при операции MS.Write я получу два буфера, а нужен один.
0
|
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
|
|
28.12.2017, 15:59 | 11 |
Тогда работайте через указатели (как и было), и берите в нужный вам буфер нужное количество байт побайтово.
0
|
39 / 2 / 1
Регистрация: 24.11.2012
Сообщений: 246
|
|
28.12.2017, 16:17 [ТС] | 12 |
Трудно быть профаном в технических терминах (это я про себя).
Попрубую еще раз. У меня есть закодированное сообщение оно лежит в буфере PBYTE. Я не могу его раскодировать полностью, размер не позволяет. Приходится его резать на куски, и декодировать кусками. Декодирую с помощью WCrypt2 (WinAPI). Поэтому тип буфера поменять не могу. Если-бы сообщение находилось в файле, то с помощью BlockRead я бы преспокойно считывал из файла в маленький по размеру (к примеру 512 байт) буфер PBYTE. И не заботился о том, откуда нужно считывать байты в следующий раз, и о том, что вдруг последний кусок из файла не заполнил весь малый буфер (т.к. BlockRead передвигает индекс и возвращает количество считанных байт). Теперь я собираюсь большой буфер с сообщением перенести в стрим, чтобы последовательно резать этот стрим на куски и переписывать эти куски в маленький буфер. Вот меня интересует момент переноса большого буфера в стрим. Но я не хочу банально копировать все байты большого буфера в стрим. Я хочу в стриме изменить указатель на буфер, чтобы буфер стрима указывал на мой большой буфер. Уф, я то понимаю, что хочу, но очень трудно это выразить словами.
0
|
28.12.2017, 16:17 | |
28.12.2017, 16:17 | |
Помогаю со студенческими работами здесь
12
Есть ли подобная альтернатива window.onscroll? API-функция для вставки текста из буфера обмена Какие есть программы для хранения истории буфера обмена? Поиск по сайту. Есть ли функция, аналогичная "get_meta_tags", только для "body"? Функция уменьшения картинки. есть только увеличения Если функция, подобная getline, которая может читать очень большие строчки из файла? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |