Helpex - Trao đổi & giúp đỡ Đăng nhập
34

Tôi có một mảng byte [] có một kích thước và tôi muốn cắt nó thành một mảng nhỏ hơn?

Tôi chỉ muốn cắt đứt đoạn cuối.

34 hữu ích 1 bình luận 33k xem chia sẻ
43

Mảng có kích thước cố định trong C # (.NET).

Bạn sẽ phải sao chép nội dung sang một nội dung mới.

byte[] sourceArray = ...
byte[] truncArray = new byte[10];

Array.Copy(sourceArray , truncArray , truncArray.Length);
43 hữu ích 0 bình luận chia sẻ
29

Bạn có thể sử dụng Array.Resize, nhưng tất cả những điều này thực sự làm là tạo một bản sao bị cắt ngắn của mảng ban đầu và sau đó thay thế mảng ban đầu bằng mảng mới.

29 hữu ích 0 bình luận chia sẻ
9
    private static void Truncate() {

        byte[] longArray = new byte[] {1,2,3,4,5,6,7,8,9,10};

        Array.Resize(ref longArray, 5);//longArray = {1,2,3,4,5}

        //if you like linq
        byte[] shortArray = longArray.Take(5).ToArray();

    }
9 hữu ích 1 bình luận chia sẻ
6

Tôi thường tạo một phương thức mở rộng:

 public static byte[] SubByteArray(this byte[] byteArray, int len)
    {
        byte[] tmp = new byte[len];
        Array.Copy(byteArray, tmp, len);

        return tmp;
    }

Có thể được gọi trên mảng byte một cách dễ dàng như thế này:

buffer.SubByteArray(len)
6 hữu ích 1 bình luận chia sẻ
4

Nhân tiện, phương thức Array.Resize mất nhiều thời gian hơn để hoàn thành. Trong trường hợp đơn giản của tôi, tôi chỉ cần thay đổi kích thước mảng byte (~ 8000 mục thành ~ 20 mục):

  1. Array.Resize // 1728 tích tắc
  2. Array.Copy // 8 tick
4 hữu ích 1 bình luận chia sẻ
3

Bạn không thể cắt ngắn một mảng trong C #. Chúng có chiều dài cố định.

Nếu bạn muốn một cấu trúc dữ liệu mà bạn có thể cắt ngắn và hoạt động giống như một mảng, bạn nên sử dụng List<T>. Bạn có thể sử dụng List<T>.RemoveRangephương pháp để đạt được điều này.

3 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading