unity3d 在C#中将int转换为sbyte

8ljdwjyq  于 2023-01-26  发布在  C#
关注(0)|答案(1)|浏览(336)

我最近买了一些蓝牙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个小时了,最远的一次是一个错误,说我的数字太小或太大。

zf9nrax1

zf9nrax11#

有一种简单的转换方法,您可以用途:

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

它的工作原理是byte和sbyte在内存中具有相同的长度。它们可以在不改变内存表示的情况下进行转换。
然而,
上面的方法可能会导致调试器的错误和奇怪的行为。2如果字节数组不是那么大,你可以用Array.ConvertAll来代替。

sbyte[] signed = Array.ConvertAll(unsigned, b => unchecked((sbyte)b));

相关问题