问题有两个:
1、如何将一个integer变量 b 的值(在内存中的4字节)直接依次转移到 4个字节的BYTE数组 a 中 。
2、如何将一个4字节 byte 数组 a 中的值,直接转移给一个INTEGER变量 b 。比如
var
a:array[0..3] of byte;
b:integer;1、 b:=65538; 如何直接将 b 的值按照在内存中的存放方式直接依次转移到 a[0]至a[3]中。
2、 a[0]:=2; a[1]:=0;a[2]:=1;a[3]:=0; 如何将a[0]至a[3]的值依次搬动 变量 b 所对应的4个字节中。
1、如何将一个integer变量 b 的值(在内存中的4字节)直接依次转移到 4个字节的BYTE数组 a 中 。
2、如何将一个4字节 byte 数组 a 中的值,直接转移给一个INTEGER变量 b 。比如
var
a:array[0..3] of byte;
b:integer;1、 b:=65538; 如何直接将 b 的值按照在内存中的存放方式直接依次转移到 a[0]至a[3]中。
2、 a[0]:=2; a[1]:=0;a[2]:=1;a[3]:=0; 如何将a[0]至a[3]的值依次搬动 变量 b 所对应的4个字节中。
解决方案 »
- 文本去掉空行------------的问题
- 怎么打一个form输出到第二个显示器上
- 有没有调用XLCALL.dll在EXCEL中增加菜单的朋友?给个例子看看
- 如何禁止TWebBrowser执行脚本?
- ▲◎如何解决从窗体关闭到程序停止,程序运行时间长的问题
- 在adodataset的AfterScroll中写代码实现了在edit中显示dbgrid中的数据的功能,但是添加的功能就不可以用了
- 明天元旦,还要加班,真是不爽!!!散分!
- Assigned(FOnMouseLeave)和FOnMouseLeave(self),到底做了什么?
- 找子窗口的句柄
- 放100分问问题。。不好意思。。有点少了!!!
- Delphi怎么向VC中的Handle变量赋值?在线等等
- 求分析啊
a:array[0..3] of byte;
b:integer;move(b,a[0],4)
//方法 1: 共用内存
procedure TForm1.Button1Click(Sender: TObject);
var bf: record b1,b2,b3,b4: Byte end ;
i: Integer absolute bf;
begin
bf.b1 := $CC ;
bf.b2 := $DD ;
bf.b3 := $EE ;
bf.b4 := $FF ;
ShowMessageFmt( '%x' , [i]); //FFEEDDCC end ;
//方法 2: 位运算
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
i := $CC or ( $DD shl 8 ) or ( $EE shl 16 ) or ( $FF shl 24 ); //不用括号也可
ShowMessageFmt( '%x' , [i]);
//FFEEDDCC end ;
//方法 3: 使用函数 procedure TForm1.Button3Click(Sender: TObject);
var i: Integer;
begin i := MakeLong(MakeWord( $CC , $DD ), MakeWord( $EE , $FF )); ShowMessageFmt( '%x' , [i]);
//FFEEDDCC end ;
//方法 4: 从静态数组...
procedure TForm1.Button4Click(Sender: TObject); var
bs: array [ 0 .. 3 ] of Byte;
P: PInteger;
begin bs[ 0 ] := $CC ;
bs[ 1 ] := $DD ;
bs[ 2 ] := $EE ;
bs[ 3 ] := $FF ;
P := @bs; ShowMessageFmt( '%x' , [P^]);
//FFEEDDCC end ;
//方法 5: 从动态数组...
procedure TForm1.Button5Click(Sender: TObject); var
bs: array of Byte;
P: PInteger;
begin SetLength(bs, 4 );
bs[ 0 ] := $CC ;
bs[ 1 ] := $DD ;
bs[ 2 ] := $EE ;
bs[ 3 ] := $FF ;
P := @bs[ 0 ];
ShowMessageFmt( '%x' , [P^]);
//FFEEDDCC end ;
摘自:http://www.cnblogs.com/del/archive/2010/04/24/1719378.html?login=1
2.可以用变体类型的结构体.
type
TWordOfInt = array[0..2-1] of WORD;
TByteOfInt = array[0..4-1] of Byte;
TIntRec = packed record //定义一个辅助类型,这样转换非常快,而且方便
case Integer of
0: (IntValue: Integer);
1: (Low, High: Word);
2: (Words: TWordOfInt);
3: (Bytes: TByteOfInt);
end;//方法一,借助TIntRec,来转换
var
Int : Integer;
Bytes : TByteOfInt;
begin
int := 100; Bytes := TIntRec(int).Bytes;//integer转字节数组
Int := TIntRec(Bytes).IntValue; //Byte数组转Integerend;//方法二, 直接用TIntRec,不转换.根本不耗费一点点CPU的时间
var
value : TIntRec;
begin
value.IntValue := 100; //看成Integer
//下面是看成Byte数组用
value.Bytes[0] := 1;
value.Bytes[1] := 1;
value.Bytes[2] := 1;
value.Bytes[3] := 1;
end;