![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование Byte в Word?
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;