Здравствуйте, Аноним, Вы писали:
А>Как раздраконить на 4 байта,
А>формула есть какая нибудь ?
А>dw:=200;
А>b1:=0;
А>b2:=0;
А>b3:=0;
А>b4:=200;
А>dw:= > 255 to 9999999 ?
в билдере и просто в с++:
из dword в байты:
b1 = (dw >> 24) & 0xff;
b2 = (dw >> 16) & 0xff;
b3 = (dw >> 8) & 0xff;
b4 = (dw >> 0) & 0xff;
или
unsigned char b[4];
memcpy(&b, &dw, 4);
или
unsigned char b[4];
(unsigned long int &)b = dw;
или
union un
{
dword dw;
unsigned char b[4];
};
un.dw = 0xab12ed64;
unsigned char b1 = un.b[0];
unsigned char b2 = un.b[1];
...
обратно:
dw = (b1 << 24) | (b2 << 16) | (b3 << 8) | b4;
или
unsigned char b[4];//заполнить значениями отдельных байт
memcpy(&dw, &b, 4);
или
unsigned char b[4];//заполнить значениями отдельных байт
dw = (unsigned long int &)b;
или
union un
{
dword dw;
unsigned char b[4];
};
//заполнить значениями отдельных байт
unsigned char b1 = un.b[0];
unsigned char b2 = un.b[1];
...
dw = un.dw;
в дельфи обязательно должен быть хотя бы один их этих способов; первый, кажется, — 100%
Здравствуйте, Аноним, Вы писали:
А>Как раздраконить на 4 байта,
[Skip]
type
TDWordRec = packed record
B1 : Byte;
B2 : Byte;
B3 : Byte;
B4 : Byte;
end;
...
dw := 200;
TDWordRec (dw).B1 = 200
// или
var
dw : DWORD;
Rec : TDWordDRec absolute dw;
...
dw := 200;
Rec.B1 = 200
procedure TForm1.Button1Click(Sender: TObject);
var
Dw:^dword;
b1,b2,b3,b4:byte;
s:string;
begin
New(Dw);
Dw^:=255;
move(Dw^,b1,1); // Dw^:=255 b1=255
str(b1,s); // Dw^:=256 b1=0
showmessage(s);
move(Dw^,b2,1); // Dw^:=255 ÊÀÊ ÏÎËÓ×ÈÒÜ ÂÒÎÐÎÉ ÁÀÉÒ ?
str(b2,s);
showmessage(s);
второй и последующий байт никак получить
Здравствуйте, Аноним, Вы писали:
А>Как раздраконить на 4 байта,
А>формула есть какая нибудь ?
А>dw:=200;
А>b1:=0;
А>b2:=0;
А>b3:=0;
А>b4:=200;
А>dw:= > 255 to 9999999 ?
Type
TMyDword=packed record
case byte of
1

asDword:DWORD);
2

b1,b2,b3,b4:byte);
3

bx:array[0..3] of byte)
end;
var a:TMyDword;x:byte;
a.asDword:=$FF00FF00;
x:=b2;