0

我遇到了很多编译器警告:

评估常量时的范围检查错误

对于整个程序中的类似陈述。

TxMsg 是一个字节。

GetRegs(0) 返回 WORD 数据类型结果。

TxMsg[0] := (GetRegs(0) shr 8) and $0F;

我在研究中发现这个错误是由隐式类型转换引起的,您需要将 int64 类型转换为 QWORD。如果是这样,那么你如何在我的代码行中做到这一点。

更新:

fRegs:SmallInt 的数组[0..20];

TxMsg:字节数组[0..8];

function GetReg(reg:Integer):word;
begin
   if reg <= RegCnt then
      result:=fRegs[reg];
end;
4

1 回答 1

0

您说涉及“字节”和“字”。两者都已经无符号,所以我不知道 int64 和 qword 与它有什么关系。

要抑制警告,只需将表达式的单词结果硬转换为字节:

TxMsg[0] := byte((GetRegs(0) shr 8) and $0F);
于 2014-02-11T09:44:54.940 回答