Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Бинарные операции   Найти похожие ветки 

 
Нуждающийся в помощи   (2005-02-25 10:14) [0]

Прошу помощи в решении вот такой задачи:

Есть i: array [1..1000000000] of integer, и есть еще четыре массива b: array [1..1000000000] of byte.
Нужно наиболее быстро сформировать значения для четырех байтовых масивом по такому принципу:
b1[1]=первые восемь бит i[1];
b2[1]=вторые восемь бит i[1];
b3[1]=третьи восемь бит i[1];
b4[1]=четвертые восемь бит i[1]

Сейчас преобразую integer в бинарную строку, после чего используя pos беру нужные тетрады и преобразую обратно в byte.
Но чуствую, что это совсем не самый скоростной вариант.


 
TUser ©   (2005-02-25 10:19) [1]

CopyMemory

Но очень плохо, что копировать придется по одному байту. Если возможно организуй так - b1[1]-b1[4] = i[1] и т.д., т.е. b1 = i[1..length(i) div 4], далее b2 и пр.


 
Anatoly Podgoretsky ©   (2005-02-25 10:26) [2]

Размер этих массивов 8 гб


 
Digitman ©   (2005-02-25 10:33) [3]

var
 iarray: array[1..10] of Integer;

 b1, b2, b3, b4: array[1..10] of Byte;
 barrays: array[0..3] of PByteArray = (@b1, @b2, @b3, @b4);

 i, j: Integer;

...
 for i := 1 to 10 do
   for j := 0 to 3 do
     barrays[j][i] := PByteArray(@iarray[i])[j];


 
Юрий Зотов ©   (2005-02-25 10:38) [4]

type
 PBytes = ^TBytes;
 TBytes = packed record
   i4, i3, i2, i1: byte
 end;

var
 P: PBytes;
...
for j := 1 to 1000000000 do
begin
 P := @i[j];
 b1[j] := P^.i1;
 b2[j] := P^.i2;
 b3[j] := P^.i3;
 b4[j] := P^.i4
end;



Страницы: 1 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
1-1109279193
akvilon
2005-02-25 00:06
2005.03.13
один TStrings


3-1108376033
Jel
2005-02-14 13:13
2005.03.13
Ошибка "Field value required" при выполнении INSERT


14-1109107780
olookin
2005-02-23 00:29
2005.03.13
Иван Панфилов - кто-нибудь слушал?


3-1108204757
UVV
2005-02-12 13:39
2005.03.13
Запрос по дате в Oracle


4-1107264874
stud
2005-02-01 16:34
2005.03.13
проблема с протоколом MODBUS