该代码的目的是将两个字节合并为ushort。所有变量均为ushort类型,但是M_hi和M_lo加载了一个字节。我本来只是字节而已,但是发生此错误,所以我改用ushort代替。第一部分掩盖了较高的字节。我最初试图使用它来防止此错误,因为我认为编译器认为它可能会溢出。尽管它不能解决问题,但我决定暂时将其保留。然后将其与0x100相乘,从而有效地将其移至更高字节的位置。最后将第二个值添加为低字节。
cv.M = ((cv.M_hi & 0x00FF) * 0x100) + cv.M_lo;
这些值是从字节数组读取的,该字节数组将数据存储在little-endian中,因此我需要执行以下操作以将它们组合起来以使用ushort值(不,我无法将整个数组转换为big-endian)
无论哪种方式,我都知道我正在使用的算法应该可以工作,但是有一些因素使它无法按原样工作。还有其他方法吗?我也尝试过检查ToInt16方法,但是Unity似乎没有。
答案 0 :(得分:5)
根据https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ushort#conversions,当添加两个类型为ushort的变量时,结果为整数。这意味着((cv.M_hi & 0x00FF) * 0x100) + cv.M_lo;
的实际类型是int
。
可以通过显式强制转换轻松解决此问题:
cv.M =(ushort)((((cv.M_hi&0x00FF)* 0x100)+ cv.M_lo);