求助比如
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进制加法和;谢谢
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进制加法和;谢谢
解决方案 »
- 【向tjianliang提问】正月十五
- 谁在用cnpack,里面的dhibernate部分怎么用?
- 网络传输文件时程序无响应怎么解决??
- vclsin 对 ActionMainMenuBar制作的菜单为什么没有效果?
- 想寫個共享軟件玩,如果用到像vclskin這樣的第三方控件,有沒版權問題?
- 刚完成的DELPHI果实,使用TSERVERSOCKET和tclientsocket,请测试
- 从哪里可下载FASTREPORT ?
- 不知道哪里有EhLib2.0控件的使用详例?
- 请教:如何用回车替代TAB键的功能
- 列数不定报表怎么做
- TStrings 和TStringList到底有什么区别????
- 可怕呀,好象甲醛中毒了
s_1: Char; ='A' 2进制为 $65
s_2: Word; =300 2进制为 $01 $2C
s_check: Byte; =12 2进制为 $12 要计算出 $65+$01+$2C+$12 的和 ; 求任意一种记录的按一个一个字节计算相加的和; 谢谢
s: integer;
......
s:=0;
p:=@myrecord1;
for i:=0 to sizeof(bak_system)-1 do
begin
s:=s+p^;
inc(p);
end;差不多是这么回事。
记录类型必须是以字节对齐的前提下,才能用这样计算。也就是说,必须是BAK_SYSTEM = packed record形式或者设置了字节对齐编译指令,否则计算结果会不正确。
但是因为格式比较整齐,所以电脑读取这个类型的数据的时候速度比较快。而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
如果把myrecord1定义成全局变量,未使用的空间初始化成0,则结果是对的,而定义成函数的内部变量,则不会初始化,结果是错误的。