Преобразовать 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));