Главная страница
    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.048 c
2-1170070143
Квэнди
2007-01-29 14:29
2007.02.18
Регистрация нового протокола


15-1169649184
Vlad Oshin
2007-01-24 17:33
2007.02.18
web программирование на delphi..даже не знаю как называется это


15-1169764560
Pass2
2007-01-26 01:36
2007.02.18
Как вы осуществляете перевод с C++ на Паскаль больших кусков кода


3-1163802142
diofant
2006-11-18 01:22
2007.02.18
Olap и IB


2-1170020736
San1
2007-01-29 00:45
2007.02.18
при работе с динамическим массивом ошибка EInvalidPointer





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