C # - Попытка преобразовать два байта в ushort, что приводит к ошибке «Невозможно косвенно преобразовать тип int в ushort» - PullRequest
0 голосов
/ 11 декабря 2018

Цель кода - объединить два байта в ushort.Все переменные имеют тип ushort, но M_hi и M_lo загружаются байтом.Изначально они были у меня всего в байтах, но эта ошибка произошла, поэтому я попытался вместо этого использовать ushort. Первая часть маскирует старший байт.Первоначально я пытался использовать это, чтобы предотвратить эту ошибку, потому что я думал, что компилятор считает, что она может переполниться.Хотя это не исправило это, но я решил оставить это пока.Затем он умножается на 0x100, что эффективно перемещает его в позицию старшего байта.Наконец, добавляем второе значение в качестве младшего байта.

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

Значения считываются из байтового массива, который хранит данные в порядке с прямым порядком байтов, поэтому мне нужно сделать что-то вроде этого, чтобы объединить их для использования значений ushort (И нет, я не могу преобразовать весь массив в big-endian).

В любом случае, я знаю, что алгоритм, который я использую, должен работать, но есть кое-что, что мешает этому работать как есть.Есть ли другие способы сделать это?Я также пытался проверить метод ToInt16, но, похоже, в Unity этого нет.

1 Ответ

0 голосов
/ 11 декабря 2018

Согласно 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);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...