Delphi中双字节类型存储到整型变量的问题

最近在做一个通过USB协议设置camera参数的功能,PC上的工具是同事用delphi写的,今天在和同事联调写数据的时候,碰到一个这样的问题。由于数据结构的需要,我们将两个双字节类型的数据存储到一个整型的数据里面,然后进行传输。delphi语言中如下:

        x, y : smallint;(相当于C/C++中的short)

    value : integer;(相当于int)

    在x,y分别从控件得到值以后,进行的是这样的运算,设定是高16位存储x,低16位存储y

    value = x;

    value = (value shl 16)or y;  相当于 value = (vlaue << 16) | y;

    然后在运行时候出现了问题了,有些数值高16位出现0xFFFF 无数据的现象。

   

    经过查找发现在 “or y”这个或过程中出现问题。

    于是我进行了这样的修改 : value = (valueshl 16) or ($FFFF and y);

    运行结果终于正常了。

    后来我自己分析认为,由于delphi高级语言的特性,在进行类似的位运算时候,一定概率上可能将 y 强制转换为 32位数据,并在高16位自动补位0xFFFF,这样就会出现无论怎么运算,高16位都无数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值