Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.04 c
15-1169670328
Amychok
2007-01-24 23:25
2007.02.18
Медиаплеер


2-1170102348
Ping-Pong
2007-01-29 23:25
2007.02.18
Поддержка русского языка только в моей программе


1-1167139043
DelphiLexx
2006-12-26 16:17
2007.02.18
Присоединить статическую библиотеку *.lib


2-1170232968
Lera
2007-01-31 11:42
2007.02.18
Теккстовый файл


6-1158032979
kotRec
2006-09-12 07:49
2007.02.18
Время на сервере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский