Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

Как 4 byte привести к longword   Найти похожие ветки 

 
novai   (2009-02-19 14:34) [0]

как реализовать подобную функцию
function 4bytetoword(a,b,c,d:byte):longword;


 
Медвежонок Пятачок ©   (2009-02-19 14:37) [1]

Move()


 
Palladin ©   (2009-02-19 14:37) [2]

function 4bytetoword(a,b,c,d:byte):longword;
Var
 l:Array [0..3] of Byte Absolute Result;
Begin
 l[0]:=
 l[1]:=
 l[3]:=
 l[4]:=
End.


 
MBo ©   (2009-02-19 14:38) [3]

Один из способов (порядок  зависит от потребностей)
Result := (a shl 24) or (b shl 16) or (c shl 8) or d;


 
Сергей М. ©   (2009-02-19 14:39) [4]

реализация напрямую зависит от требуемого порядка следования байтов-параметров в результирующем лонгворде


 
novai   (2009-02-19 14:40) [5]

те я имел ввиду, чтобы имея 4 byte объеденить их или сгруппировать в longword


 
Юрий Зотов ©   (2009-02-19 14:41) [6]

function PackToLongWord(a, b, c, d: byte): LongWord;
begin
 Result = a shl 24 or b shl 16 or c shl 8 or d
end;


 
novai   (2009-02-19 14:45) [7]

спасибо всем, все упаковалось!


 
Юрий Зотов ©   (2009-02-19 14:52) [8]

> novai   (19.02.09 14:45) [7]

Следующий вопрос будет - а как теперь распаковать?
:o)

a := LW shr 24;
b := (LW and $FF0000) shr 16;
c := (LW and $FF00) shr 8;
d := LW and $FF;


 
han_malign ©   (2009-02-19 14:56) [9]

еще 5 копеек
type
   TLongWord = packed record
      case Integer of
      0: ( b1,b2,b3,b4: byte );
      1: ( wLo, wHi: word );
      2: ( dw: LongWord );
   end;


 
novai   (2009-02-19 14:57) [10]

Спасибо Юрий, но распаковывать не надо), но все же интересно как если например result такого типа:
byte4 = record
 a,b,c,d:byte;
end;


 
han_malign ©   (2009-02-19 15:09) [11]


> если например result такого типа
> byte4 = record

...
with Result do begin
см. Юрий Зотов ©   (19.02.09 14:52) [8]
end;
...
var __dwResult: LongWord absolute Result;
...
type Pbyte4 = ^byte4;
Result:= Pbyte4(@dw)^;

(хотя, кажется, и Result:= byte4(dw) прокатит)
...
type
  TLongWord = packed record
     case Integer of
     0: ( four_byte: byte4 );
     1: ( wLo, wHi: word );
     2: ( dw: LongWord );
  end;
lw.dw:= dw;
Result:= lw.four_byte;


 
novai   (2009-02-19 15:20) [12]


> han_malign ©   (19.02.09 15:09) [11]

принял к сведению (записал на будущее) огромное, человеческое спасибо Вам всем от новичка


 
Юрий Зотов ©   (2009-02-19 15:23) [13]

> novai   (19.02.09 14:57) [10]

TByte4 = packed record
a, b, c, d: byte;
end;

function UnpackLongWord(LW: LongWord): TByte4;
begin
 Result := TByte4(LW);
end;


 
Jack128_   (2009-02-19 15:27) [14]

народ, акститесь.. В SysUtils уже обявлены эти рекорды для подобных задач.   LongRec/WordRec/Int64Rec...  
RTFS


 
Юрий Зотов ©   (2009-02-19 15:35) [15]

> Jack128_   (19.02.09 15:27) [14]

Так каждый ламер сможет. А мы, ][акер"ы легких путей не ищем!


 
Anatoly Podgoretsky ©   (2009-02-19 15:36) [16]


> Jack128_   (19.02.09 15:27) [14]

Успел ответить, ну нравятся людям самодельные лисапеды, но с другой стороны и польза есть.


 
palva ©   (2009-02-19 22:15) [17]

Не очень экономно делать сдвиги на 24 бита. Время выполнения сдвига зависит от величины сдвига. так что лучше так:
n = (((b1 shl 8 or b2) shl 8 or b3) shl 8) or b4


 
Германн ©   (2009-02-20 01:04) [18]


> han_malign ©   (19.02.09 14:56) [9]

Моё любимое решение.



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

Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.006 c
1-1209133936
Kolan
2008-04-25 18:32
2009.04.05
В MDI приложение WindowState := wsMaximized; происходит долго&#133


15-1234046172
Student
2009-02-08 01:36
2009.04.05
С чего начать? Или HellowWorld по серьёзному


2-1234501149
Гарик
2009-02-13 07:59
2009.04.05
OnShow(self)


6-1201972877
..::KraN::..
2008-02-02 20:21
2009.04.05
Documents and Settings - доступ по FTP закрыт...


2-1234336304
Andrewtitoff
2009-02-11 10:11
2009.04.05
Access Violation





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