Хорошо, давайте добавим несколько слов, относящихся к нарезке.
block_data[0x1E:0x20]
- это типичное нарезание массива. Он возвращает фрагмент block_data из элемента 0x1E (14de c) в элемент 0x20-1 (15de c). Мы не знаем тип block_data, хотя я предполагаю, что это будут байты. Мы сделаем это в VB. net для любого типа массива.
Я написал расширение типа Array, называемое slice. В Visual Studio создайте новое решение для библиотеки. Следующее может быть скомпилировано в. net framework и. net core 3.1. Добавьте новый модуль следующим образом:
Imports System.Runtime.CompilerServices
Public Module SliceExtension
<Extension()>
Public Function Slice(Of T)(brr() As T, Optional inizio As Integer = 0, Optional fine As Integer = 0) As T()
Dim Len As Integer = brr.Length
Dim returnArray() As T = {}
If inizio < 0 Then
inizio = Len + inizio
If fine = 0 Then
fine = Len
ElseIf fine < 0 Then
fine = Len + fine
End If
Else
inizio = idx(len:=Len, pos:=inizio)
fine = idx(Len, fine, Len)
End If
Dim elemento As Integer = 0
While (inizio < fine)
Array.Resize(returnArray, returnArray.Length + 1)
returnArray(elemento) = brr(inizio)
elemento += 1
inizio += 1
End While
Return returnArray
End Function
Public Function idx(ByVal len As Integer, pos As Integer, Optional termine As Integer = 0) As Integer
If IsNothing(pos) Then
pos = termine Or 0
ElseIf (pos < 0) Then
pos = Math.Max(len + pos, 0)
ElseIf pos = 0 And termine < 0 Then
pos = len
Else
pos = Math.Min(pos, len)
End If
Return pos
End Function
End Module
Скомпилируйте. Это создаст dll в папке .bin пути проекта. В том же решении создайте настольное или консольное приложение для тестирования расширения. Добавить ссылку на недавно созданную DLL. Добавьте модуль и вставьте его следующим образом:
Imports SliceClass.SliceExtension
Module Program
Sub Main()
Dim arr() As String = {"10", "20", "30", "40", "50", "60", "70"}
Dim retarr() As Object = arr.Slice(-3, -1)
Console.WriteLine(retarr.ToString)
End Sub
End Module
Использование: Array.Slice (начало, остановка). См. здесь для более подробного объяснения. Обратите внимание, что расширение не поддерживает шаг.