Преобразовать int в sbyte в С#

Недавно я купил несколько устройств Bluetooth LE и хотел прочитать данные, поступающие от них, в Unity. Проблема в том, что я использовал библиотеку, которая дает мне только массив байтов. Но мне нужен массив sbyte.

Пример вывода:
83,186,1,3
Но я хочу:
38, -70,1,3

Вот мой код:

      int x = 0;
int y = 0;
z = 0;

result = Convert.ToString(bytes[3], 2).PadLeft(8, '0');
Debug.Log("First Conversion:" + result.Remove(0,1) + " Original:" + bytes[3]);
sbyte result1 = sbyte.Parse(result.Remove(0,1));
Debug.Log("Conversion:" + result1 + " Original:" + bytes[3]);

Я пробовал это в течение последних 5 часов. Самое дальнее, что у меня было, это ошибка, в которой говорилось, что мое число слишком мало или слишком велико.

1 ответ

Существует простой метод преобразования, вы можете использовать:

      sbyte[] signed = (sbyte[]) (Array) unsigned;

Это работает из-за того, что byte и sbyte имеют одинаковую длину в памяти. Их можно преобразовать без необходимости изменения представления в памяти.


Однако,

описанный выше метод может привести к ошибкам и странному поведению отладчика. Если массив байтов не такой большой, вы можете использоватьвместо.

      sbyte[] signed = Array.ConvertAll(unsigned, b => unchecked((sbyte)b));
Другие вопросы по тегам