【发布时间】:2020-03-11 12:31:11
【问题描述】:
请听我说完。让sysA 成为Uint32 类型的系统变量(结构成员),用于存储一个唯一的十六进制ID,长度为四个字节。
在我的 CAPL 脚本中,我想在此 UUID 和我通过来自消息的四个字节的组合重新定义的整数之间执行检查。我采用了这种方法:
variables
{
dword uuid;
}
on message myMsg
{
uuid = (this.byte(0)<<24) | (this.byte(1)<<16)| (this.byte(2)<<8) | this.byte(3);
if (@sysA == uuid)
{
// do something
}
}
此代码触发错误,因为 dword 和 Uint32 类型不兼容。然后我尝试将sysA 转换为dword:invalid type cast。我不知道为什么在 CAPL 语言中会出现这种情况。根据文档:
字节(无符号,1字节)
字(无符号,2字节)
双字(无符号,4字节)
int(有符号,2字节)
长(有符号,4字节)
int64(有符号,8 字节)
qword(无符号,8 字节)
我无法将 Uint32 系统变量类型转换为 int:int i = 32768 超出范围,int i = 32768LL 无效。但是dword,在这种情况下,严格来说是4字节的unsigned int。
在这种情况下,我应该正确地使用什么作为我的 uuid 的类型,为什么?
【问题讨论】:
-
我认为
dword作为uuid的类型很好。您能否显示您尝试将@sysA显式转换为 dword 的代码?
标签: capl