[英]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.