gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:28:04 32 4
gpt4 key购买 nike

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

我的项目要求我剪切一个字节变量(感谢File.ReadAllytes)分成两部分,然后能够将它们“粘贴”到代码的另一部分。

我考虑过将字节数组转换为字符串,然后拆分(使用 .Split ),最后将其转换为字节数组,但我的可执行文件不再工作:转换为字符串会杀死可执行文件中的某些字符,从而使它已经过时了。

我找到了这篇文章:Split a byte array at a delimiter

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

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

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

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

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)

确实,我遇到了这个错误:目标表不够长。检查 destIndex 和长度,以及数组的下限。

此错误指向这一行:

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 = "The\Path\to\your\file.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。

关于arrays - 如何将字节值拆分为多个较小的字节值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029410/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com