Главная страница
    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.46 MB
Время: 0.07 c
1-1166521793
atruhin
2006-12-19 12:49
2007.02.18
Определить отправителя при drag&drop


15-1169661034
AntiUser
2007-01-24 20:50
2007.02.18
Интересные новости (ИМХО)


1-1166871574
kroner
2006-12-23 13:59
2007.02.18
Почему FindFirst возвращает не ноль?


3-1164780850
Монг
2006-11-29 09:14
2007.02.18
Коппонент ADOQuery


15-1169984485
hmmm
2007-01-28 14:41
2007.02.18
HTML





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский