C# - 尝试将两个字节转换为 ushort 导致 "Cannot implictly convert type ' int' to 'ushort' "error

标签 c# unity3d

代码的目的是将两个字节合并为ushort。所有变量都是ushort类型,但M_hi和M_lo加载的是一个字节。我最初将它们作为字节,但发生了这个错误,所以我尝试使用 ushort 第一部分屏蔽了较高的字节。我最初试图用它来防止这个错误,因为我认为编译器认为它可能会溢出。虽然它没有解决它,但我决定暂时保留它。然后它与 0x100 相乘,有效地将它移动到较高字节的位置。最后加上第二个值作为低字节。

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

这些值是从一个字节数组中读取的,它以小端字节序存储数据,所以我需要做这样的事情来组合它们以使用 ushort 值(不,我不能将整个数组转换为大端字节序) .

无论哪种方式,我都知道我使用的算法应该可以工作,但有些东西会阻止它按原样工作。还有其他方法吗?我也试过检查 ToInt16 方法,但 Unity 似乎没有。

最佳答案

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

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

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

关于C# - 尝试将两个字节转换为 ushort 导致 "Cannot implictly convert type ' int' to 'ushort' "error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53723889/

相关文章:

c# - 在 Vs Code 中编辑时,Unity C# 脚本不提供自动完成功能

c# - 如何使我的 Windows 窗体应用程序吸附到屏幕边缘?

c# - 基于 PIVOT 查询的 Oracle View 不是空值

unity3d - Unity vs Udk vs CryEngine

c# - Unity Physics2D.Raycast 命中自身

c# - 将对象返回到池中

c# - 在 Update() 函数中完成后如何停止方法? - C# - Unity3D

c# - 枚举的扩展方法,而不是枚举的实例

java - 解释一下我的输出

c# - 为什么这会产生可为空数组/如何创建不可为空数组