Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование Byte в Word?


Страницы:   1 2

ZV ©   (2011-01-26 17:04:00) 

Как в Delphi  преобразовать 2 значения Byte в Word. На Си делаю побитовый сдвиг и наложение маски а как это сделать в Delphi? Может есть какая функция или делать так же как и на Си. Может кто покажет пример?


Студент   (2011-01-27 06:51:00) [21]

Чуть не забыл:

procedure TForm1.Button8Click(Sender: TObject);
var i: Integer; S: String;
begin
S:='((0, ';
For i:=1 To 65534 Do
     Begin
     If (i mod 256)=0 Then
           S:=S+'),'#13#10'('+IntToStr(i)+', '
     Else
           If ((i+1) mod 256)=0 Then
                 S:=S+IntToStr(i)
           Else
                 S:=S+IntToStr(i)+', ';
     If (i mod 100)=0 Then
           S:=S+#13#10;
     End;
S:=S+'65535));';
Memo1.Text:=S;
end;


Да, я дурак..... %))


Студент   (2011-01-27 06:50:00) [22]

Скомпилировал [10]... Неправильно считает... Нужно как-то по другому заполнять масив...
Про [11] говорит мол "Invalid combination of opcode and operands" если пытаться пременную подставить...((
У [13] результат неверный... Нужно через Hex: Word1:=HexToInt(IntToHex(Byte2, 2)+IntToHex(Byte1, 2));


Inovet   (2011-01-27 05:45:00) [23]

> [12] Студент   (27.01.11 04:42)
> А какой будет самым быстрым?

Самый быстрый, который ничего не делает - с рекордом и с массивом, а [10] - это явный кандидат в победители на конкурсе извращенцев.:)))


Студент   (2011-01-27 05:39:00) [24]

Ну... Вот с "Hex" такое бы сработало...


KilkennyCat   (2011-01-27 04:55:00) [25]

strtoint(inttostr(b1) +inttostr(b2))


Студент   (2011-01-27 04:42:00) [26]

Занятно...))

А поясните пожалуйста "case Integer of" в record (кстати packed ни разу не пригодился, остаётся тож самое)?

А какой будет самым быстрым? Случайно не [10]?


sniknik   (2011-01-26 19:48:00) [27]

ну или тот же код что в [9] по мотивам asm ([3])
var
 w: Word;
begin
 asm
   mov byte ptr w[0], $01
   mov byte ptr W[1], $01
 end;
 ShowMessage(IntToStr(w));
end;


DiamondShark   (2011-01-26 19:36:00) [28]

const
Q: array[byte,byte] of word = (
(0,1,2,3 ... 255),
(256, 257 ... 511)
...
(65280, ... ,65535)
);

w := Q[b1, b2];


sniknik   (2011-01-26 19:28:00) [29]

> Не проходит по условию. Нужно два байта. :)
блин, упустил почему то, и получается фигню нес...
тогда так
var
 w: Word;
 b: array[0..1] of byte absolute w;
begin
 b[0]:= 1;
 b[1]:= 1;
 ShowMessage(IntToStr(w));
end;


DiamondShark   (2011-01-26 19:26:00) [30]

мне бы ваши проблемы


ZV   (2011-01-26 19:11:00) [31]


> а как на С сделано ?


unsigned int word;
unsigned char Ah, Bl;
Word=Ah;
word=(word<<8)|Bl;


То же на Delphi -   Word1:=Byte1+(Byte2 shl 8)(1 вариант от Германн)
нормально работает


Германн   (2011-01-26 18:20:00) [32]


> sniknik ©   (26.01.11 17:55) [4]
>
> и еще на конкурс извращенцев...

Не проходит по условию. Нужно два байта. :)


Игорь Шевченко   (2011-01-26 18:17:00) [33]


> Может есть какая функция или делать так же как и на Си.


а как на С сделано ?


sniknik   (2011-01-26 17:55:00) [34]

и еще на конкурс извращенцев...
procedure TForm1.Button1Click(Sender: TObject);
var
 w: Word;
 b: byte absolute w;
begin
 w:= 0;
 b:= $FF;
 ShowMessage(IntToStr(w));
end;


12   (2011-01-26 17:33:00) [35]

var
 w:Word;
 b1, b2:Byte;
begin
 b1 := 0;
 b2 := 1;
 asm
   push ax
   mov al, b1
   mov ah, b2
   mov w, ax
   pop ax
 end;
 ShowMessage( IntToStr(w) );


Германн   (2011-01-26 17:21:00) [36]

1. Word1:=Byte1+(Byte2 shl 8)
2. type
 TMyWord = packed record
   case Integer of
     0 : (Byte1, Byte2 : Byte);
     1 : (Word1 : Word);
   end;


sniknik   (2011-01-26 17:19:00) [37]

> Может кто покажет пример?
w:= b;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо