繁体   English   中英

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

[英]C# - Trying to convert two bytes to ushort resulting to “Cannot implictly convert type 'int' to 'ushort'” error

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

根据https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/ushort#conversions,在添加两个类型为ushort的变量时,结果为int。 这意味着((cv.M_hi & 0x00FF) * 0x100) + cv.M_lo;的实际类型((cv.M_hi & 0x00FF) * 0x100) + cv.M_lo; int

这可以通过显式强制转换轻松解决:

cv.M =(ushort)((((cv.M_hi&0x00FF)* 0x100)+ cv.M_lo);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM