本帖最后由 taolee2008 于 2009-10-28 11:23:49 编辑

解决方案 »

  1.   

    Move(ComData.Data, PacketData, ComData.Size);
      

  2.   

    所以你的数据不是这个样子啊,更可能是这个样子才对:
      4 Bytes  PacketSize: Word;
    ----------------------------
      4 Bytes  RequestID:  Integer;
    ----------------------------
      4 Bytes  RequestMsg: Byte;
               ResultCode: Byte;
    ----------------------------
      (MAX_PACKET_SIZE + 3)and(not 3) Bytes  Data: array[0..MAX_PACKET_SIZE - 1] of Byte;
    ----------------------------
      

  3.   

    看来是Integer转换的是6个Byte 之前的90, 0, 0, 0,把后面的1, 0也加上了,所以变成了65536超大的数
    但不知道为什么要6个而不是4个Byte
    34, 0,
    0, 0, 0, 0, 0, 0, 
    24, 
    0, 
    0, 0
      

  4.   

    Integer 类型是4字节(32位)有符号整数, 最高位是符号位, 如果是正数, 符号位是 0、负数的符号位是1
      

  5.   

    在intel机器上,第一个字节是低字节。intel是小端派的。
      

  6.   

    第一个Word用了头两字节,因为字节对齐,下面两字节没用。
    从第5个字节开始4字节是Integer;Integer的第三字节是1,按照小端派,是65536。