如何将字节值拆分为多个较小的字节值?



我正在学习用 VB.NET 编程,我正在尝试操作可执行文件

我的项目要求我将一个字节变量(我得到了File.ReadAllytes)分成两部分,然后能够将它们"粘贴"在代码的另一部分。

我想过将我的字节数组转换为字符串,然后拆分(使用 .Split),最后将其转换为字节数组,但我的可执行文件不再有效:转换为字符串会杀死可执行文件中的某些字符,使其过时。

我找到了这篇文章:在分隔符处拆分字节数组

..但问题是他使用 C# 工作,我觉得将其代码转换为 vb.net 真的很困难。

总之,以下是我的程序的步骤:

  • 使用File.ReadAllytes读取所有字节
  • 定期拆分此字节数组。分隔符不会是 链,但数组的一半。
  • 对通道进行分组并执行

我已经尝试将我的可执行文件拆分为两个字节变量,但我阻止:

Bytes_Executable = IO.File.ReadAllBytes(File1)
Dim Separator As Integer = Bytes_Executable.Length / 2
MsgBox(Separator)
Dim Sortie = {}
Dim Sortie2 = {}
Array.Copy(Bytes_Executable, 0, Sortie, 0, Separator)
Array.Copy(Bytes_Executable, Separator, Sortie2, 0, Bytes_Executable.Length)

确实,我遇到了这个错误:The destination table is not long enough. Check destIndex and the length, as well as the lower limits of the array.

此错误指向以下行:

Array.Copy(Bytes_Executable, Separator, Sortie2, 0, Bytes_Executable.Length)

提前谢谢你!

您的代码存在一些问题:

  1. 您拥有的两个数组(SortieSortie2)未初始化(它们的长度为零)。因此,当您尝试复制到它们时,Copy方法失败,因为"数组不够长"。要设置数组的长度,我们使用Dim someVariable(length - 1) As SomeType.例如,Dim arr(9) As Byte是一个长度为 10 的 Byte 数组。

  2. Bytes_Executable.Length / 2

    这不会处理字节数为奇数的情况。

  3. Array.Copy(Bytes_Executable, Separator, Sortie2, 0, Bytes_Executable.Length)

    在这里,您使用Bytes_Executable的完整长度来填充第二个数组。因此,即使您正确设置了数组的长度(点 #1),这仍然会失败,因为第二个数组的长度将只有原始数组长度的一半。

你可以使用这样的东西:

Dim filePath = "ThePathtoyourfile.exe"
Dim exeBytes = IO.File.ReadAllBytes(filePath)
Dim len1 As Integer = CInt(Math.Ceiling(exeBytes.Length / 2))
Dim len2 As Integer = exeBytes.Length - len1
Dim firstHalf(len1 - 1) As Byte
Dim secondHalf(len2 - 1) As Byte
Array.Copy(exeBytes, 0, firstHalf, 0, len1)
Array.Copy(exeBytes, len1, secondHalf, 0, len2)

如您所见,我用Math.Ceiling()来解决第二个问题。 例如,当您通过 2.5 时,Math.Ceiling将返回 3。

使用整数除法()计算第一部分的大小

Dim Separator As Integer = Bytes_Executable.Length  2

在调用Array.Copy之前,必须以正确的长度创建目标数组。

Dim Sortie(Separator - 1) As Byte
Dim Sortie2(Bytes_Executable.Length - Separator - 1)  As Byte

请注意,由于在 VB 中我们指定数组索引的上限而不是数组的长度,因此我们必须减去 1。

您必须将要复制的长度指定为最后一个参数(即剩余长度)

Array.Copy(Bytes_Executable, Separator, Sortie2, 0, Bytes_Executable.Length - Separator)

相关内容

  • 没有找到相关文章