//switch_endian为自定义
         BYTE cmd2[1024];
struct old_info * p_info;
memset(cmd2, 0, sizeof(cmd2));
cmd2[0] = 0xfb;
*((unsigned short*)(cmd2 + 1)) = 17 + sizeof(struct old_info);
switch_endian((unsigned short*)(cmd2 + 1));
cmd2[3] = 0x02;
cmd2[4] = 0x02;
cmd2[16 + sizeof(struct old_info)] = 0xfe;
p_info = (struct old_info*)(cmd2 + 15);
p_info->decode_address_status = 1;
p_info->decode_address[0] = 224;
p_info->decode_address[1] = 5;
p_info->decode_address[2] = 6;
p_info->decode_address[3] = 1;
p_info->decode_port_status = 1;
p_info->decode_port = 4000;

解决方案 »

  1.   

    cmd2: array[0..1023] of byte;
    p_info: ^old_info;
    memset(cmd2, 0, sizeof(cmd2));
    PByte(^cmd2+1)^ := 17+sizeof(old_info);
    switch_endian(PByte(^cmd2+1));
    cmd2[3] := $02;
    cmd2[4] := $02;
    cmd2[16+sizeof(old_info)] := $FE;
    p_info:= p_info(^cmd2+15);
    with p_info^ do
    begin
     decode_address_status := 1;
     decode_address[0] := 224;
     decode_address[1] := 5;
     decode_address[2] := 6;
     decode_address[3] := 1;
     decode_port_status := 1;
     decode_port := 4000;
    end;
      

  2.   

    PByte(^cmd2+1) := 17+sizeof(old_info);有错误!
    提示:')' expected but identifier 'md2' found
      

  3.   

    PWord(@cmd2[1])^= 17 + SizeOf(old_info);
      

  4.   

    PWord(@cmd2[1])^ := 17 + SizeOf(old_info);