各位大虾,我现在开发一个串口通讯的程序,发送的是一个数据结构,例如下
type
TEmple=record
Field1 : string;
Field2 : integer;
Field3 : boolean;
Field4 : char;
end;
需要将这个数据结构转换为byte数组,如何转换,转换后又如何转换回来.
type
TEmple=record
Field1 : string;
Field2 : integer;
Field3 : boolean;
Field4 : char;
end;
需要将这个数据结构转换为byte数组,如何转换,转换后又如何转换回来.
解决方案 »
- 怎么做?大概多少钱?连接考勤机,将员工的刷卡数据实时传到原有的B/S OA系统中
- 关于循环的控制!!高手帮下 谢谢
- 请问 DBGridEH 如何 不显示 内容行 到 Footer 行 这间的 竖线 ( 带图片 ) ???????????急!!!!!!!!!!!!!!!!!!!!!!!!!!
- 最近常常在C#版溜达,给C#版的友人来篇“友邦惊诧论”。
- 等你等的好辛苦
- 量子物理史话 - 极精彩的物理历史小说!
- DBGRID记录的更新的问题,解决100分马上给,在线等
- 热点点击 赶快行动 我在线送分
- 在SQLSERVER65下建表,报错,应该是格式问题,大家看看
- 哪位有没有经典加密算法(DES等)的delphi源代码?
- 用什么方法或函数能实现,返回自己的IP地址?
- 串口如何传输文字和文件
别用string,string是一个不定长的类型type
TEmple = packed record
Field1 : string[25];
Field2 : integer;
Field3 : boolean;
Field4 : char;
end;
TByteArray = array[0..SizeOf(TEmple) - 1] of Byte;
var
vEmple: TEmple;
vByteArray: TByteArray;
begin
vEmple.Field1 := '给我分';
vEmple.Field2 := 100;
vEmple.Field3 := True;
vEmple.Field4 := '$';
Move(vEmple, vByteArray[0], SizeOf(vEmple));
end;
接着,把string[1],...string[byte1*256+byte2]用ord()转成byte;
下面三种域就明显不难了.
在turbo pascal或borland pascal中,string最大长度为255,用1个byte记录,
这个长度存放在string[0]中,
而在delphi中,string最大长度用2个byte记录,
它们应存放在atring[-1],string[0]中,
所以应把string[-1]、string[0]的内容写出成2个byte:byte1,byte2,
接着,根据byte1,byte2,形成一个word: W:=byte1*256+byte2;
再依此把string[1],...string[W]用函数ord()转成byte;
答完给分
我是想把整个结构统一转换,然后还要转换为原来的结构的,那样转在麻烦了,不过还是谢谢你。
把参数次序换一下就可以了
变体类型你是怎么赋值的?
变体类型通过
VarArrayCreate([0, SizeOf(vEmple)-1],varByte)
然后循环