【问题标题】:c#) How to refer to the contents of 1mb byte array, without copy new arrayc#) 如何在不复制新数组的情况下引用 1mb 字节数组的内容
【发布时间】:2020-11-26 06:10:29
【问题描述】:

如何在不复制新数组的情况下引用1mb字节数组的内容。

我搜索了一些类似 [ArraySegment] 的函数。

但它只支持int类型作为偏移量。

我需要使用 long 类型作为偏移量。

【问题讨论】:

  • 这个问题欠缺,这个转介需要做什么。 Span<T> 可能是一个很好的解决方案。然而问题是缺乏如此多的细节很难知道你真正想要什么,你正在尝试做什么。或者实际问题是什么
  • 为什么 1mb 数组需要 long ? int 最大支持 2gb 吗?

标签: c# arrays offset


【解决方案1】:

我不确定我是否理解这个问题,但也许以下方法是您正在寻找的:

    public static void BaSetLong(byte[] byteArray, int longOffset, long value) {
        int start = longOffset * 8;
        byte[] array = BitConverter.GetBytes(value);
        for (int i = 0; i < 8; i++) byteArray[start + i] = array[i];
    }

    public static long BaGetLong(byte[] byteArray, int longOffset) {
        int start = longOffset * 8;
        return BitConverter.ToInt64(byteArray, start);
    }

【讨论】:

    【解决方案2】:

    这就是 Span&lt;byte&gt; 的发明目的,尽管它仅在 netstardard 2.1 中引入。

    如果您不能使用它,那么您必须传递对数组、偏移量和长度的引用。虽然您可以创建自己的 Span 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2021-03-26
      • 2019-05-31
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      相关资源
      最近更新 更多