【问题标题】:AsBuffer() for sbyte[]?AsBuffer() 用于 sbyte[]?
【发布时间】:2016-03-10 20:50:08
【问题描述】:

我正在处理一项需要我从字节数组创建 IBuffer 实例的小任务。

对于常规字节数组,来自 System.Runtime.InteropServices.WindowsRuntime 的 .AsByte() 扩展方法工作得很好,但是我的许多数组实际上是 sbyte[](代码是移植的遗留 Java 代码,其中一些值是定义为例如new sbyte[] { -86, 27, 28, 29, -1 };

是否也有涵盖sbyte[] 用例的扩展方法?不幸的是,没有太多关于 sbyte 数组操作(以及转换为字节数组)的信息。

【问题讨论】:

    标签: c# .net byte uwp


    【解决方案1】:

    AsBuffer()之前可以试试这个转换方法

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

    Array.ConvertAll Documentation

    这种方法是在.NET 2.0中引入的,之后的所有版本都存在。

    命名空间:系统

    程序集:mscorlib(在 mscorlib.dll 中)

    编辑:

    经过进一步的交谈,似乎这段代码存在于Class Library (Portable) 而不是常规的Class Library 中,因此ConvertAll 不可用。

    用这个版本可以实现以上。

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

    【讨论】:

    • 由于某种原因,ConvertAll Array 扩展方法不存在。你能指定它是在哪里定义的吗?
    • 我也希望从我在 UWP 工作的标签中可以明显看出 :)
    • 我更新了我的答案以包括文档和命名空间/程序集。
    • 包括在内,但由于某种原因,在 Array 类上不存在 ConvertAll 方法,无论是作为静态方法还是在实例上。
    • 这很奇怪。您的代码是在常规库项目中还是在做其他事情?
    【解决方案2】:

    只需将sbyte[] 转换为byte[],然后使用其他方法。这是一个例子。

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

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2018-04-26
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2017-05-04
      • 1970-01-01
      相关资源
      最近更新 更多