Вниз
Скачать: CL | DM;

Каким способом лучше всего собрать из байтов 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.027 c
5-1148857887
Delphi_uzer
2006-05-29 03:11
2007.02.18
обработчик события OnClick для динамически созданых компонентов


2-1170181141
Garacio
2007-01-30 21:19
2007.02.18
ComboBox как в Яндекс


9-1144169967
Pa5ha
2006-04-04 20:59
2007.02.18
Эффекты на OpenGL


15-1169849835
esportsux
2007-01-27 01:17
2007.02.18
программа автоматизации работы к/к


2-1169887745
DemonP
2007-01-27 11:49
2007.02.18
отправка почты на Delphi




   Наверх