各位大虾,我现在开发一个串口通讯的程序,发送的是一个数据结构,例如下
type 
  TEmple=record
    Field1 : string;
    Field2 : integer;
    Field3 : boolean;
    Field4 : char;
  end;
需要将这个数据结构转换为byte数组,如何转换,转换后又如何转换回来.

解决方案 »

  1.   

    Field1 : string;
    别用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;
      

  2.   

    先把string[0]转成2个byte:byte1,byte2,
    接着,把string[1],...string[byte1*256+byte2]用ord()转成byte;
    下面三种域就明显不难了.
      

  3.   

    抱歉,错了,
    在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;
      

  4.   

    to zswang(伴水清清)(专家门诊清洁工)这样可以转换了,然后我再将byte数组转换为Variant类型,然后如何再将这个Variant转换为原来类型呢?
      

  5.   

    to zswang(伴水清清)(专家门诊清洁工)
    答完给分
      

  6.   

    to zzwu(未名)
    我是想把整个结构统一转换,然后还要转换为原来的结构的,那样转在麻烦了,不过还是谢谢你。
      

  7.   

    Move(vByteArray[0], vEmple, SizeOf(vEmple));
    把参数次序换一下就可以了
    变体类型你是怎么赋值的?
      

  8.   

    循环赋值的
    变体类型通过
    VarArrayCreate([0, SizeOf(vEmple)-1],varByte)
    然后循环
      

  9.   

    我昨天已经搞定了,就结贴了,谢谢你zswang(伴水清清)(专家门诊清洁工)