раздраконить dword -> 4 byte
От: Аноним  
Дата: 23.03.07 16:20
Оценка:
Как раздраконить на 4 байта,

формула есть какая нибудь ?

dw:=200;

b1:=0;
b2:=0;
b3:=0;
b4:=200;


dw:= > 255 to 9999999 ?
Re: раздраконить dword -> 4 byte
От: Rius Россия  
Дата: 23.03.07 16:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как раздраконить на 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%
Re: раздраконить dword -> 4 byte
От: Danchik Украина  
Дата: 23.03.07 17:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как раздраконить на 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
Re[2]: раздраконить dword -> 4 byte
От: Аноним  
Дата: 24.03.07 05:52
Оценка:
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);


второй и последующий байт никак получить
Re: раздраконить dword -> 4 byte
От: tristanelli  
Дата: 24.03.07 20:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как раздраконить на 4 байта,


А>формула есть какая нибудь ?


А>dw:=200;


А>b1:=0;

А>b2:=0;
А>b3:=0;
А>b4:=200;


А>dw:= > 255 to 9999999 ?



Type
TMyDword=packed record
case byte of
1asDword:DWORD);
2b1,b2,b3,b4:byte);
3bx:array[0..3] of byte)
end;

var a:TMyDword;x:byte;

a.asDword:=$FF00FF00;

x:=b2;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.