如何将下面的record 类型转换成 string类型,即string类型的数据报。  ARP_HDR = packed record
HardwareType:            WORD;
ProtocolType:            WORD;
HLen:                    UCHAR;
PLen:                    UCHAR;
Operation:               WORD;
SenderHA:                MACADDRESS;
SenderIP:                DWORD;
TargetHA:                MACADDRESS;
TargetIP:                DWORD;
  end;

解决方案 »

  1.   

    最简单的方法:把记录中的每一个元素都转换成String,然后加上分隔符进行拼接成String的数据包!
      

  2.   

    TTestRec = record
        a: Integer;
        b: Integer;
        c: array[0..10] of Char;
      end;procedure TForm1.Button2Click(Sender: TObject);
    var
      t: TTestRec;
      buf: array[0..30] of Char;
      s, s1: string;
    begin
      t.a := 10;
      t.b := 20;
      StrCopy(t.c, PChar('Hello World'));  s1 := Format('%d%d%s', [t.a, t.b, t.c]);
      wsprintf(buf, PChar(s1));
      s := buf;
      ShowMessage(s);
    end;
      

  3.   

    to beyondtkl(大龙驹<*学习祖国医学中,国粹,路在何方?*>) 
    你的方法主要用到的是下面这句
    s1 := Format('%d%d%s', [t.a, t.b, t.c]);这样,的确是可以达到目的,但是如果还要还原那就麻烦了所以可以改成如下:
    s1 := Format'%d,%d,%s',[t.a, t.b, t.c]);
    以','字符来分隔之
    但这样也有一定的局限性,即t.c中不应包含','字符
      

  4.   

    如果你是为了在网络里传输,还不如写个简单的类,传对象过去,
    那样问题就容易解决多了:类(对象).属性,接收短只要有该类的定义就行了,你用record就不方便了
      

  5.   

    >>如何将下面的record 类型转换成 string类型,即string类型的数据报。
    你的想法, 不不好, 
    用 string, 很容易出bug, 
    但也可解决, 用 TStringStream 就可
     sm: TStringStream;
    begin
        t.a := 10;
      t.b := 20;
      StrCopy(t.c, PChar('Hello World'));   sm := TStringStream.Create('');
       sm.Write((@t)^, sizeof(TTestRec));    sm.DataString  ;// 你要的   sm.Free;
      

  6.   

    to dabaicai(菜鸟)
    在网络里传对象?用什么方式传?值传递还是指针传递?to  Delphityro(不吃腥的猫)
    网络里怎么传递结构体指针?
     
      

  7.   

    还是C/C++好struct A a;
    struct A pb;
    char *pa;pa = (char *)&a;pb = (struct A*)pa;直接转换 即可 好像delphi不行呢。。
    网络里怎么传递结构体指针?
    // 当成 字符串传就是 接受的时候进行转换就OK。
      

  8.   

    看了一下 beyondtkl(大龙驹<*学习祖国医学中,国粹,路在何方?*>) 
    和 aiirii(ari-淘金坑)的代码是不是可以这样理解:先把结构体的内存块复制下来,
    通过流或字符串的方式进行传递,
    收到以后,再用指针指向收到的内存块?
    不过Delphi里类型检查比较严格,转换起来恐怕很难啊COM和Webservice里对传递自定义类型都有比较好的办法
    建议楼主采用