C#-尝试将两个字节转换为ushort,导致“无法将类型'int'隐式转换为'ushort'”错误

时间:2018-12-11 12:08:30

标签: c# unity3d

该代码的目的是将两个字节合并为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似乎没有。

1 个答案:

答案 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);