![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как использовать только часть массива? [WinXP]
Kolan © (2006-06-05 13:33:00)Здравствуйте,
Проблема такая: У меня есть ф-ция для подсчета кс:
function TCustomProtocolManager.EvalUserDataControlSumm(
Arr: array of Byte): Word;
Как видно ей надо передать массив байт.
Далее..
Я получаю массив байт последний из которых - кс. Прмер:
1 2 3 4 5 6 7 8 90- пусть 90 - кс.
Чтобы проверить правильность кс мне нужно сравнить кс из полученного массива срасчетной. Те в ф-циюEvalUserDataControlSummнужно передать массив БЕЗ песледнего элемента.
Как это сделать?
Есть вариант завести временный массив туда перекопиролвать всё кроме песледнего, я считаю это долго и ненужно.
Пробовал использоватьCopy:
TheoryDataControlSumm := EvalUserDataControlSumm(Copy(UserData,
Low(UserData), Length(UserData)-2));
Но:
[Pascal Error] KFreGrafDeviceSpecialProtocolManagers.pas(166): E2008 Incompatible types
Kolan (2006-06-05 13:52:00) [21]Всё, извеняюсь понял.
Массив UserData был передан в процедуру вот так:
procedure TKFreGrafReceiveProtocolManager.ProcessPackageData({..}
UserData: array of Byte);
Поэтому Copy незнала, что он динамический и не могла сработать...
Благодарю за обсуждение.
Kolan (2006-06-05 13:47:00) [22]
> А в чём проблема?
Проблемы то нет, лишняя переменная, может без нё можно..
Kolan (2006-06-05 13:46:00) [23]Нет портить массив нельзя.
tesseract (2006-06-05 13:44:00) [24]
> Без временного не обойтись?
А в чём проблема? Можно проще SetLenght(UserData,high(UserData)) - обрежеться последний символ.
Kolan (2006-06-05 13:43:00) [25]Как-то тип привести, чтобы он понял что это массив.
Kolan (2006-06-05 13:41:00) [26]
> tesseract © (05.06.06 13:40) [1]
Без временного не обойтись?
tesseract (2006-06-05 13:40:00) [27]TempArr:Array of byte;
SetLength(TempArray,high(UserData)-1);
System.move(UserData,TempArray,high(UserData)-1);
Должно работать , но не проверял.