在 VB.NET 中将二进制文件内容转换为十六进制代码字符串

问题描述 投票:0回答:1

所以我正在制作一个图像混淆器,这将有助于保护共享计算机上图像的隐私。这个想法是读取图像的内容,将字节数组转换为相应的 ANSI 数组,将 ANSI(十进制)转换为十六进制,最后将该十六进制代码数组保存在新文件中。然后我可以简单地删除原始文件。

到目前为止,我想出的是:

Dim scr_filename As String = My.Computer.FileSystem.SpecialDirectories.Desktop + "\mypic.jpg"

Dim fdata = My.Computer.FileSystem.ReadAllBytes(scr_filename)

        Dim res As String = "", fstr As String, num As Integer

        fstr = System.Text.Encoding.Default.GetString(fdata)

        For i As Integer = 0 To (fstr.Length - 1)
            num = Asc(fstr.Substring(i, 1))
            res += num.ToString + " "
        Next
        MsgBox(res)

这段代码的问题是,将 20 kb 文件转换为 ANSI 大约需要 10 秒,超过 20 kb 时,它会冻结,我根本得不到任何输出。另请注意,到目前为止,这仅将字节转换为其 ANSI 值,而不是将 ANSI 转换为其相应的十六进制代码。

有什么方法可以优化此代码,以便能够转换最大 400-500 kb 的文件?非常感谢。

vb.net casting hex visual-studio-2022
1个回答
0
投票

处理大量数据时,循环内的 Asc 函数可能会很慢。

不需要将字节转换为字符,再转换为 ANSI 值,直接处理字节即可。

Dim scr_filename As String = My.Computer.FileSystem.SpecialDirectories.Desktop + "\mypic.jpg"

Dim fileBytes As Byte() = File.ReadAllBytes(scr_filename)

Dim hexString As String = String.Join("", fileBytes.Select(Function(b) b.ToString("X2")))

File.WriteAllText("path_to_your_output_file.txt", hexString)
© www.soinside.com 2019 - 2024. All rights reserved.