求助比如
 
 BAK_SYSTEM = record 
    s_1: Char; ='A'   2进制为 $65
    s_2: Word; =300   2进制为 $01 $2C
    s_check: Byte; =12    2进制为 $12要计算出  $65+$01+$2C+$12 的和 ;任意一种记录的按一个一个字节计算一个2进制加法和;谢谢

解决方案 »

  1.   

    求助 比如 BAK_SYSTEM = record 
        s_1: Char; ='A'  2进制为 $65 
        s_2: Word; =300  2进制为 $01 $2C 
        s_check: Byte; =12    2进制为 $12 要计算出  $65+$01+$2C+$12 的和 ; 求任意一种记录的按一个一个字节计算相加的和; 谢谢
      

  2.   

    p: PByte;
    s: integer;
    ......
    s:=0;
    p:=@myrecord1;
    for i:=0 to sizeof(bak_system)-1 do 
    begin
      s:=s+p^;
      inc(p);
    end;差不多是这么回事。
      

  3.   


    记录类型必须是以字节对齐的前提下,才能用这样计算。也就是说,必须是BAK_SYSTEM = packed record形式或者设置了字节对齐编译指令,否则计算结果会不正确。 
      

  4.   

    阿发伯的说法好像反了。Record的数据各个字节都是对齐的,数据格式比较完整,所以这种格式相对packed占用的内存比较大,
    但是因为格式比较整齐,所以电脑读取这个类型的数据的时候速度比较快。而Packed Record对数据进行了压缩,节省了内存空间,当然他的速度也变的慢了。type   
      myrec = packed record   
        n1 : integer;      //   4个字节   
        n2 : shortint;     // 1个字节   
      end;   
      sizeof(myrec)   ------     5   
       
    type   
      myrec = record   
        n1 : integer;     
        n2 : shortint;   
     end;   
     sizeof(myrec)    ------     8
      

  5.   

    楼上请注意我的说法是针对2楼的例子:用PByte指针计算record的字节和!而你的例子说明我前面说的话是完全正确的,2楼的方法对packed record无疑是可行的,但是对于你的第二个记录,就可能不正确了。
      

  6.   

    如4楼所说,如果没加packed关键字可能会有错误,record空间的有未使用的地址,随机的数据。
    如果把myrecord1定义成全局变量,未使用的空间初始化成0,则结果是对的,而定义成函数的内部变量,则不会初始化,结果是错误的。
      

  7.   

    额,看了9楼的话,明白阿发伯的意思了。我理解错了,sorry to 阿发伯
      

  8.   

    如果没用packed,有什么办法吗