Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизКаким способом лучше всего собрать из байтов Integer? Найти похожие ветки
← →
Arm79 © (2007-01-30 16:55) [0]Есть динамический массив байтов. Это разложенный Integer
Вопрос: как лучше всего собрать из байтов целый Integer?
Последовательность байтов в массиве жестко не задана, я сделал так, чтобы первым элементом был самый младший байт, далее по возрастанию
IntArray := ReadBytes(Data, 4, Position);
// так работает
Result := 0;
for i := 3 downto 0
do begin
Result := Result + IntArray[i];
if i > 0 then Result := Result shl 8;
end;
// так тоже
Result := 0;
for i := 0 to 3
do begin
TempByte := IntArray[i];
for j := 0 to 7
do begin
Inc(Result, (TempByte and 1) * Trunc(Power(2, j + i*8)));
TempByte := TempByte shr 1;
end;
end;
// А хотелось бы как то вроде этого. НЕ РАБОТАЕТ )
// Пытался по разному писать, но результат отрицательный
System.Move(IntArray, Result, 4);
← →
JFK&MM_extramarital_son (2007-01-30 16:57) [1]Заблудился в трех соснах?
точне четырех.
← →
Сергей М. © (2007-01-30 17:10) [2]var
MyByteArray: array[0..3] of Byte;
MyIntegerVariable: Integer;
..
MyIntegerVariable := PInteger(@MyByteArray)^;
← →
sniknik © (2007-01-30 17:13) [3]var
MyByteArray: array[0..3] of Byte;
MyIntegerVariable: Integer absolute MyByteArray;
begin
...
end;
← →
Arm79 © (2007-01-30 17:25) [4]
> sniknik © (30.01.07 17:13) [3]
> var
> MyByteArray: array[0..3] of Byte;
> MyIntegerVariable: Integer absolute MyByteArray;
> begin
> ...
> end;
Уже не раз замечал что после ваших ответов узнаю что то новое )
Такую конструкцию никогда не видел. Теперь читаю Help
> Сергей М. © (30.01.07 17:10) [2]
> var
> MyByteArray: array[0..3] of Byte;
> MyIntegerVariable: Integer;
>
> ..
>
> MyIntegerVariable := PInteger(@MyByteArray)^;
Без собаки все работает, сенкс
← →
Arm79 © (2007-01-30 17:30) [5]
> sniknik © (30.01.07 17:13) [3]
> var
> MyByteArray: array[0..3] of Byte;
> MyIntegerVariable: Integer absolute MyByteArray;
> begin
> ...
> end;
Небольшое уточнение:
var
MyByteArray: array[0..3] of Byte;
MyIntegerVariable: PInteger absolute MyByteArray;
begin
Result := MyIntegerVariable^;
end;
← →
Arm79 © (2007-01-30 17:30) [6]у меня ведь был динамический массив
← →
sniknik © (2007-01-30 19:38) [7]> у меня ведь был динамический массив
ну тогда и уточняй на динамическом, а то в [5] пример получился ошибочным.
а в общем понятно, что ты хотел показать.
я кстати не обратил внимания на то что в вопросе динамический, просто привел аналог [2] без "лишнего" действия.
← →
Джо © (2007-01-30 19:47) [8]
> // А хотелось бы как то вроде этого. НЕ РАБОТАЕТ ) //
> Пытался по разному писать, но результат отрицательный System.
> Move(IntArray, Result, 4);
Move (Int,IntArray[0],4);
← →
Джо © (2007-01-30 19:48) [9]Сорри, поменять местами Source и Destination.
← →
vrem (2007-01-30 20:44) [10]function asmdw(pal,blue,green,red:byte):longword;
asm
shl edx,24
shld eax,edx,8
shl ecx,24
shld eax,ecx,8
mov dl,[ebp+$8]
shl edx,24
shld eax,edx,8
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c