我正在学习用 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)
提前谢谢你!
您的代码存在一些问题:
-
您拥有的两个数组(
Sortie
和Sortie2
)未初始化(它们的长度为零)。因此,当您尝试复制到它们时,Copy
方法失败,因为"数组不够长"。要设置数组的长度,我们使用Dim someVariable(length - 1) As SomeType
.例如,Dim arr(9) As Byte
是一个长度为 10 的 Byte 数组。 -
Bytes_Executable.Length / 2
:这不会处理字节数为奇数的情况。
-
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)