记录数据如下:  TRSOCK = record  
                 TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte;
                 RCO,RP,RC,RL,RH,RFD:integer;
               end;按记录长度计算应该是31字节!但实际上SIZEOF却是32字节!我调试的时候发现
TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte;  //7字节

TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6,TMP7:byte;  //8字节
所占的字节数是相同的!
怎么才能让
  TRSOCK = record  
                 TMP,TMP1,TMP2,TMP3,TMP4,TMP5,TMP6:byte;
                 RCO,RP,RC,RL,RH,RFD:integer;
               end;读出31字节呢?

解决方案 »

  1.   

    昏,好象0000 0000  0000 0000
           0000 0000 0000你用size of 测的结果是
         0000 0000 0000 0000
         0000 0000 0000 0000
    我想size of 测时是有最小单位的,没用完的也算,这跟c 是一样的
      

  2.   

    用这记录写到文件也是32字节的!读也是32字节!看来只好用BUF了!用记录有解决的办法吗?
      

  3.   

    因为Delphi编译参数默认是{$A+}
    也就是说一般情况下,编译器会进行数据对齐,使每个字段按4字节对齐。
    因为我们知道CPU传递给Cache的内存地址总是可以被4整除的,32位CPU嘛,32位就是4个字节。
    所以Delphi默认的这种方式优化了数据的读取速度,但浪费了一些空间。
    如果你很在乎这些小空间,那就在声明的时候加个关键字,这样SizeOf就是你想要的值了:
    TRSOCK = packed record
      …………
    end;