加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi:循环记录中的字节

发布时间:2020-12-15 04:32:12 所属栏目:大数据 来源:网络整理
导读:我有一个包含多个字节/字节数组的记录: type TRdmPacket = record sc: byte; subSc: byte; msgLength: byte; destUID: array[0..5] of byte; srcUID: array[0..5] of byte; transNum: byte; portID: byte; msgCount: byte; subDevice: array[0..1] of byte;
我有一个包含多个字节/字节数组的记录:
type
   TRdmPacket = record
    sc: byte;
    subSc: byte;
    msgLength: byte;
    destUID: array[0..5] of byte;
    srcUID: array[0..5] of byte;
    transNum: byte;
    portID: byte;
    msgCount: byte;
    subDevice: array[0..1] of byte;
    cc: byte;
    pid: array[0..1] of byte;
    pdl: byte;
  end;

我有一个这种类型的记录,我需要循环内部的字节(通过将每个字节添加到校验和来创建一个简单的校验和).有一种简单的方法可以在循环中执行此操作,还是需要单独检查记录中的每个元素?

解决方法

你可以这样做:
var
  sum: Byte;
  ptr: PByte;
  i: Integer;
begin
  sum := 0;
  ptr := PByte(@rdmPacket);

  for i := 0 to SizeOf(TRdmPacket) - 1 do
  begin
    sum := sum xor ptr^;
    Inc(ptr);
  end;
end;

在这种特殊情况下,它将正常工作,因为TRdmPacket中的所有字段都是字节或字节数组,并且它们没有对齐.进一步阅读Packed和$Align directive如何影响内部记录布局,以防您希望将此方法用于其他类型的记录.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读