Главная страница
    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-1169938212
hmmm
2007-01-28 01:50
2007.02.18
PHP mail


2-1170158201
Long1
2007-01-30 14:56
2007.02.18
Поиск / Исключение / Замена


2-1170313141
Creative
2007-02-01 09:59
2007.02.18
Current Update


15-1169871260
atruhin
2007-01-27 07:14
2007.02.18
Java программа для запуска требует wjview.exe


15-1169811809
Real
2007-01-26 14:43
2007.02.18
WAP: Существует ли визуальный редактор WML?





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