将sbyte[]转换为AsBuffer()?

3
我正在处理一个小任务,需要我从字节数组创建IBuffer实例。
对于常规的字节数组,System.Runtime.InteropServices.WindowsRuntime中的.AsByte()扩展方法完全可行,但是我的许多数组实际上是sbyte[](代码是移植自旧版Java代码,其中一些值被定义为例如new sbyte[] { -86, 27, 28, 29, -1 }。
是否有涵盖sbyte[]用例的扩展方法呢?不幸的是,关于sbyte数组操作(以及转换为字节数组)的信息不太多。
2个回答

1

只需将sbyte[]转换为byte[],然后使用另一个方法。以下是示例。

sbyte[] signed = { -2, -1, 0, 1, 2 };
byte[] unsigned = (byte[]) (Array)signed; 

1

在使用AsBuffer()之前,您可以尝试此转换方法。

var signedBytes = new sbyte[] { -86, 27, 28, 29, -1 };
IBuffer buffer = Array.ConvertAll(signedBytes, b => (byte)b).AsBuffer();

Array.ConvertAll文档

该方法在.NET 2.0中引入,并存在于之后的所有版本中。

命名空间:System

程序集:mscorlib(位于mscorlib.dll中)

编辑:

进一步聊天后,发现此代码位于“类库(可移植)”而不是常规“类库”,因此无法使用“ConvertAll”。

可以使用此版本实现上述内容。

var signedBytes = new sbyte[] { -86, 27, 28, 29, -1 };
IBuffer buffer = signedBytes.Cast<byte>().ToArray().AsBuffer();

由于某些原因,ConvertAll 数组扩展方法不存在。您能指定它在哪里定义吗? - fonix232
它被包含了,但是由于某种原因,在Array类中不存在ConvertAll方法,无论是静态方法还是实例方法。 - fonix232
很奇怪。你的代码是在一个常规的库项目中还是在做其他事情? - Cubicle.Jockey
是的,我确定。这是一个针对PCL目标配置文件259的常规配置,但在纯UWP实现中也没有出现这种方法。不过可能是我的问题出了什么错... - fonix232
有趣。以后请注意在您的问题中说明您正在使用类库(便携式)。让我来看看。 - Cubicle.Jockey
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接