【问题标题】:C# - Trying to convert two bytes to ushort resulting to "Cannot implictly convert type 'int' to 'ushort'" errorC# - 尝试将两个字节转换为 ushort 导致“无法将类型 'int' 隐式转换为 'ushort'”错误
【发布时间】:2018-12-11 12:08:29
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否尝试过将您的算法分解为每行代码的单个操作,以查看哪个转换为 int?
  • BitConverter.ToUInt16(....) ?
  • 如何将 M_hi 和 M_lo 显式转换为 ushort?示例:(ushort)cv.M_hi.
  • 问题是当你乘以 0x100 时,结果是一个整数,然后你必须转换:(ushort)((cv.M_hi

标签: c# unity3d


【解决方案1】:

根据https://docs.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);

【讨论】:

    猜你喜欢
    • 2013-09-18
    • 2013-09-06
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多