Delphi 中,Byte数组如何赋值呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 中,Byte数组如何赋值呢?相关的知识,希望对你有一定的参考价值。

请给个例子..谢谢...
我照着你的复制的,但是,提示cannot initialize local variables

转换 tbytes 到 integer
procedure tform1.button1click(sender: tobject);
var
bs: tbytes; tbytes 就是 byte 的动态数组
i: integer;
begin
它应该和 integer 一样大小才适合转换
setlength(bs, 4);
bs[0] := $10;
bs[1] := $27;
bs[2] := 0;
bs[3] := 0;
因为 tbytes 是动态数组, 所以它的变量 bs 是个指针; 所以先转换到 pinteger i := pinteger(bs)^;
showmessage(inttostr(i)); 10000
end;
从 bytes 静态数组到 integer 的转换会方便些
procedure tform1.button2click(sender: tobject);
var
bs: array[0..3] of byte;
i: integer;
begin
bs[0] := $10;
bs[1] := $27;
bs[2] := 0;
bs[3] := 0;
i := integer(bs);
showmessage(inttostr(i)); 10000
end;
转换到自定义的结构
procedure tform1.button3click(sender: tobject);
type
tdata = packed record
a: integer;
b: word;
end;
var
bs: array[0..5] of byte; 这个数组应该和结构大小一直
data: tdata;
begin
fillchar(bs, length(bs), 0);
bs[0] := $10;
bs[1] := $27;
data := tdata(bs);
showmessage(inttostr(data.a)); 10000
end;
转换给自定义结构的一个成员
procedure tform1.button4click(sender: tobject);
type
tdata = packed record
a: integer;
b: word;
end;
var
bs: array[0..3] of byte;
data: tdata;
begin
fillchar(bs, length(bs), 0);
bs[0] := $10;
bs[1] := $27;
data.a := integer(bs);
showmessage(inttostr(data.a)); 10000
end;
参考技术A 例子程序:

$apptype console
PROGRAM exp;
var a:array [1..10] of byte=(1,3,5,7,9,2,4,6,8,10);
i:integer;
begin
for i:=1 to 10 do writeln(a[i]);
end.

运行结果:
E:\ygb>dcc32 a.dpr
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
a.dpr(8)
9 lines, 0.12 seconds, 10636 bytes code, 1813 bytes data.

E:\ygb>dcc32 a.dpr
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
a.dpr(7)
8 lines, 0.05 seconds, 10636 bytes code, 1813 bytes data.

E:\ygb>a.exe
1
3
5
7
9
2
4
6
8
10本回答被提问者采纳

DELPHI里byte型数组取值与比较

Delphi里申明一个数组array of byte = ($00,$**,$**,$**,$**,$00);
我从服务器收到一段数据存在如上的一个6字节数组中,我要判断中间的4个字节是不是($80,$00,$00,$01),要怎么写呢,非要一个个字节比较吗?

没钱了。。。有没有好心人帮忙的!

参考技术A 很简单...
假设你的数组变量为 a,并且下标从 0 开始:
var
a: YourArrayType;
p: PInteger;
begin
...
p := @a[1]; //指向第二个字节
if p^ = $01000080 then // Intel 处理器的整数高位在高地址区,所以要反过来
...
end;
原理就是:4个字节是一个整数的空间,直接比较一个整数变量和一个常数是否相等
如果你要判断的字节数超过8个,或者($80,$00,$00,$01)是变化的,这个方法就不行了,要用 CompareMem 来比较,速度要慢一些:
var
a: YourArrayType;
b: YourConst;
begin
...
if CompareMem(@a, @b, SizeOf(b)) then
...
end;本回答被提问者采纳
参考技术B

Byte型数组可以按以下方法操作:

    定义

    var

       a:array [0..10] of Byte;//11个元素的数组

       b:array of byte;//动态数组

    取值

    c:=a[0];

    比较

    if (a[2]<b[3]) then...

    取得数组大小

    k=Length(b);

以上是关于Delphi 中,Byte数组如何赋值呢?的主要内容,如果未能解决你的问题,请参考以下文章

DELPHI里byte型数组取值与比较

Delphi字节转换字节数组

delphi 中byte类型

Delphi中等效的BYTE数组(BYTE [])与null终止一个整数?

DELPHI中byte类型和char类型区别?

C语言中如何将结构体中的值赋给BYTE类型的缓存?