39 / 2 / 1
Регистрация: 24.11.2012
Сообщений: 246
1

Есть-ли функция подобная BlockRead только для буфера PBYTE?

28.12.2017, 04:22. Показов 883. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Тип буфера PBYTE. Создаю его с помощью GetMem. Но читать из него приходится пачками с разными размерами, в такой-же тип буфера (PBYTE). Ну и важно знать сколько байт на самом деле прочиталось, и в какой позиции стою, после прочтения очередной пачки.
Интересует есть-ли готовая функция в Делфи, или придется свою писАть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2017, 04:22
Ответы с готовыми решениями:

В VB есть функция DoEvents, какая подобная функция есть в Delphi?
В Visual Basic'е есть функция DoEvents, какая подобная функция есть в Delphi?

А есть ли функция подобная inlist()?
Привет. В фоксе есть функция inlist() проверяющая на соответствие чего-то какому-то списку. ...

Есть ли для C# подобная компонента как для delphi АльфаСкинс
Привет всем) Есть ли для C# подобная компонента как для delphi АльфаСкинс? чтобы сделать интерфейс...

есть ли подобная статистика у MSN
https://adwords.google.com/select/KeywordToolExternal есть ли подобная статистика у MSN,интерисует...

11
пофигист широкого профиля
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
Цитата Сообщение от Kuzya69 Посмотреть сообщение
BlockRead читает из файла в буфер. А мне надо из буфера в буфер но кусками.
Загоните в Stream и читайте сколько угодно Read, Write.
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.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  A: array of Byte;
  MS: TMemoryStream;
  I: Integer;
begin
  SetLength(A, 128);
  for I := Low(A) to High(A) do A[i]:=Random(9);
  MS:=TMemoryStream.Create;
  MS.Write(A[0], 128);
  MS.Seek(0, soFromBeginning);
  MS.SaveToFile('d:\test.txt');
  FreeAndNil(MS);
end;
Есть-ли функция подобная BlockRead только для буфера PBYTE?
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
28.12.2017, 15:12 7
Для работы через указатель, вот код.
(Имхо, неудобнее, с точки зрения отладки, и требует дополнительных навыков, чтобы понимать что и как происходит)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  A: pByte;
  MS: TMemoryStream;
  I: Integer;
begin
  GetMem(A, 32);
  for I := Low(A^) to High(A^) do A[i]:=Random(2);
  MS:=TMemoryStream.Create;
  MS.Write(A[0], 16);
  MS.Seek(0, soFromBeginning);
  MS.SaveToFile('d:\test.txt');
  FreeAndNil(MS);
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
Цитата Сообщение от Kuzya69 Посмотреть сообщение
Не, немного неверно я объяснил свой вопрос. Я не хочу заставлять программу перемещать-копировать байты из буфера в стрим.
Можно сделать все как-то через указатели? Т.е. чтобы буфер остался на месте, а при обращении к стриму, байты брались из буфера. У меня просто вечная проблема работы с именованием-разименованием этих указателей.
Ничего не понял... Перечитал дважды.
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.12.2017, 16:17
Помогаю со студенческими работами здесь

Есть ли подобная альтернатива window.onscroll?
Есть ли подобная альтернатива, но с более плавным скроллом, без передергивания? Без аякс, ангуляр....

API-функция для вставки текста из буфера обмена
Привет) Нужно реализовать копирование значение textBox1.Text в буфер и после програмно вставить...

Какие есть программы для хранения истории буфера обмена?
Привык уже к тому, что история буфера обмена сохраняется и можно достать оттуда что-то недавно...

Поиск по сайту. Есть ли функция, аналогичная "get_meta_tags", только для "body"?
Простой поиск по сайту. Через glob прохожусь по всем html страничкам сайта, а далее, как я...

Функция уменьшения картинки. есть только увеличения
Привет всем. Есть функция увеличения картинки при наведении мыши, а еще нужна для уменьшения при...

Если функция, подобная getline, которая может читать очень большие строчки из файла?
Если функция, подобная getline, которая может читать очень большие строчки из файла?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru