我正在将代码从32位UNIX移植到64位LINUX机器。
如果const long say l1
中有变量,ushort
中的变量说us1
。现在我需要比较这两个说if( l1 != us1)
....这是行不通的。我应该使用什么类型转换?
这篇文章在32位Unix中运行,但在Linux 64位中无法预测。有时它可以正常工作,有时却不能。
原因是long占用的位数现在改变了。我打算将us1
(ushort
}转换为ulong
,然后进行比较。说(l1 != (ulong) us1)
。但在此l1
中仍然会签名。
请建议适当的类型转换。代码段如下:
nise::facex::order::NiseWorkOrder *wrkOrd = 0; (this is a USHORT)
int retCode = getNiseOrder(wrkOrd, asyncQ->m_order_number);
NiseWorkOrder
是一个函数,其中wrkOrd
是对指针的引用
getniseorder
执行CROBA调用并填充NiseWorkOrder
结构。
现在,asyncQ->m_version_num
是osplong
。
TRACEPRT(APP_LVL, ("wrkOrd->orderHead.wrkOrdKey.order.orderVersion = <%d>",wrkOrd->orderHead.wrkOrdKey.order.orderVersion));
TRACEPRT(APP_LVL, ("(const long)asyncQ->m_version_num = <%d>", (const long)asyncQ->m_version_num));
(const long)asyncQ->m_version_num !=
wrkOrd->orderHead.wrkOrdKey.order.orderVersion)
......
问题在于,尽管痕迹总是在条件为真时有时仍然显示两个值相同(不应该是。