Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2015, 21:09   #1
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию Нарастить массив байт

Доброго всем!
Код:
var
   Buff, OutBuff: TBytes;
begin
   SetLength(OutBuff, Length(Buff));
   OutBuff := Buff; 
   if Length(OutBuff) mod 128 <> 0 then
      begin 
         While Length(OutBuff) mod 128 <> 0 do
           begin
              SetLength(OutBuff, Length(OutBuff)+1);
              OutBuff[Length(OutBuff)-1] := 0;
           end;  
      end;
end;
Подскажите как можно более эстетично нарастить массив байт до Length(OutBuff) mod 128 = 0. Если конечно еще не накосячил в коде выше, т.к. набираю чисто на форуме без IDE.

Последний раз редактировалось kta87; 11.02.2015 в 21:17.
kta87 вне форума Ответить с цитированием
Старый 11.02.2015, 21:58   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так понимаю TBytes = array of Byte;
Код:
   SetLength(Buff,10);
   for i:=0 to 9 do Buff[i]:=i;
//   SetLength(OutBuff, Length(Buff)); этого не надо
   OutBuff:=Buff;  // OutBuff и Buff указатель на одно и то же
   k:=Length(OutBuff) mod 128;
   if k>0 then SetLength(OutBuff,Length(OutBuff)+128-k); //Одновременно и нулями хвост заполнится, после этого OutBuff и Buff указатели на разные массивы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 11.02.2015 в 22:02.
Аватар вне форума Ответить с цитированием
Старый 11.02.2015, 22:01   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

SetLength(OutBuff, Length(OutBuff)+Length(OutBuff) mod 128);
И вынести за While.
А вообще это на сляб похоже. Может будешь тогда выделять сразу блоками по 128 байт?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2015, 22:04   #4
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Так понимаю TBytes = array of Byte;
Да. Спасибо за ответ.
Аватар, корректно затем вернуть размер (обрезать хвост с "0") вот так?
Код:
SetLength(OutBuff, Length(Buff))
Цитата:
Сообщение от Stilet Посмотреть сообщение
А вообще это на сляб похоже.
Что такое "сляб"? (мы же не о металлургии)
Цитата:
Сообщение от Stilet Посмотреть сообщение
Может будешь тогда выделять сразу блоками по 128 байт?
Stilet, буду конечно, но последний блок не всегда, точнее редко когда, будет равен 128 байтам. Грубо говоря:
Код:
count := Length(Buff) div 128;
if Length(Buff) mod 128 <> 0 then
Inc(count);
...
//Далее наращиваем последний блок до mod 128 = 0

Последний раз редактировалось kta87; 11.02.2015 в 22:12.
kta87 вне форума Ответить с цитированием
Старый 11.02.2015, 22:07   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно конечно, если очень нужно
Цитата:
Length(OutBuff)+Length(OutBuff) mod 128
100 + 100 mod 128 = 200 а-я-я
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 11.02.2015 в 22:09.
Аватар вне форума Ответить с цитированием
Старый 11.02.2015, 22:36   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что такое "сляб"? (мы же не о металлургии)
Почти ) https://ru.wikipedia.org/wiki/Slab
Имелось ввиду выделение блоками одного размера
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция изменяет старший байт числа на заданное значение,не изменяя младший байт ( C++ ) Любимый_1 Помощь студентам 3 07.10.2013 16:42
Как методу передать массив байт vovken1997 Общие вопросы C/C++ 6 08.07.2013 20:57
Дан массив из 9 байт расматривая его как массив 72 бит подсчитать число нулей в этом массиве. noob asm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 16.04.2012 19:04
Массив байт в Visual C# free6878 Помощь студентам 2 01.03.2011 18:54
Как конвертировать массив символов в массив байт davinci C++ Builder 6 30.10.2010 18:09