当前位置:  开发笔记 > 编程语言 > 正文

如何拆分字节数组

如何解决《如何拆分字节数组》经验,为你挑选了3个好方法。

我在内存中有一个字节数组,从文件中读取.我想在某个点(索引)拆分字节数组,而不必只创建一个新的字节数组并一次复制每个字节,从而增加了操作的内存占用量.我想要的是这样的:

byte[] largeBytes = [1,2,3,4,5,6,7,8,9];  
byte[] smallPortion;  
smallPortion = split(largeBytes, 3);  

smallPortion将等于1,2,3,4
largeBytes将等于5,6,7,8,9



1> Eren Ersönme..:

仅供参考. System.ArraySegment结构基本上与ArrayView上面代码中的相同.如果您愿意,可以以相同的方式使用这种开箱即用的结构.



2> 小智..:

在使用Linq的C#中,您可以这样做:

smallPortion = largeBytes.Take(4).ToArray();
largeBytes = largeBytes.Skip(4).Take(5).ToArray();

;)


OP想知道如何做到这一点**,而不必创建一个新的字节数组并一次复制每个字节**但这正是你的LINQ代码所做的.两次.

3> Michał Piask..:

我就是这样做的:

using System;
using System.Collections;
using System.Collections.Generic;

class ArrayView : IEnumerable
{
    private readonly T[] array;
    private readonly int offset, count;

    public ArrayView(T[] array, int offset, int count)
    {
        this.array = array;
        this.offset = offset;
        this.count = count;
    }

    public int Length
    {
        get { return count; }
    }

    public T this[int index]
    {
        get
        {
            if (index < 0 || index >= this.count)
                throw new IndexOutOfRangeException();
            else
                return this.array[offset + index];
        }
        set
        {
            if (index < 0 || index >= this.count)
                throw new IndexOutOfRangeException();
            else
                this.array[offset + index] = value;
        }
    }

    public IEnumerator GetEnumerator()
    {
        for (int i = offset; i < offset + count; i++)
            yield return array[i];
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        IEnumerator enumerator = this.GetEnumerator();
        while (enumerator.MoveNext())
        {
            yield return enumerator.Current;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        byte[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
        ArrayView p1 = new ArrayView(arr, 0, 5);
        ArrayView p2 = new ArrayView(arr, 5, 5);
        Console.WriteLine("First array:");
        foreach (byte b in p1)
        {
            Console.Write(b);
        }
        Console.Write("\n");
        Console.WriteLine("Second array:");
        foreach (byte b in p2)
        {
            Console.Write(b);
        }
        Console.ReadKey();
    }
}

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有