Vb.net Net-将字符串编码为十六进制

Vb.net Net-将字符串编码为十六进制,vb.net,Vb.net,这是我将字符串转换为十六进制的代码 Function StringToHex(ByVal text As String) As String Dim xhex As String For i As Integer = 0 To text.Length - 1 xhex &= Asc(text.Substring(i, 1)).ToString("x").ToUpper Next Return xhex End Function 我用这段代

这是我将字符串转换为十六进制的代码

Function StringToHex(ByVal text As String) As String
    Dim xhex As String
    For i As Integer = 0 To text.Length - 1
        xhex &= Asc(text.Substring(i, 1)).ToString("x").ToUpper
    Next
    Return xhex
End Function
我用这段代码将字符串文件转换为十六进制,但如果文件大小超过1MB,我的程序将不响应
如何使此代码对大于1MB的文件更有效对不起,我的英语不好

正如我在最初的评论中所说的,您当前的方法是在每次执行for循环时创建一个新字符串。字符串在.NET中是不可变的(不能更改)-因此,例如,如果字符串中有3000个字符,
xHex=&a
将创建3000个字符串,这只是第一部分。然后是一个
子字符串
,然后是一个
ToString
,最后是一个
ToUpper
——因此,如果我的数学正确,您将为输入字符串中的每个字符创建4个字符串(如果您有3000个字符,则会增加12000个字符串)

子字符串的调用是不必要的-您可以将字符串视为数组,并将字符串中的每个字符作为数组索引进行访问,因此现在您可以:

xhex &= Asc(text(i)).ToString("x").ToUpper
您还可以通过在对
.ToString()
的调用中使用大写字母“X”来摆脱对
.ToUpper()
的调用-因此现在您有:

xhex &= Asc(text(i)).ToString("X")
您还可以将
xhex
a
StringBuilder
,然后每次通过循环只创建一个额外的字符串(调用
.ToString()
)。把这些放在一起,你会发现:

Dim xhex As StringBuilder = New StringBuilder()

For i As Integer = 0 To text.Length - 1
    xhex.Append(Asc(text(i).ToString("X"))
Next

Return xhex.ToString()
这可能有助于这个过程,但如果字符串真的很大,您仍然可能会遇到内存问题。如果文件非常大,我建议使用
读取它,并一次处理
一个字节(或者一次处理几个字节,由您选择)


我还建议用谷歌搜索VB.NET将字符串转换为十六进制,因为还有许多其他方法可以实现这一点。

使用
StringBuilder
会有所帮助。现在,每次循环时,您都要创建一个新的
xhex
字符串。这是非常低效的。现在我再看一遍,您是否尝试过
text.ToString(“x”).ToUpper()
,看看会发生什么?请注意,python上的“Hex Converter.exe中发生的第一次意外异常类型为'System.InvalidCastException'”类似于此text.encode(“Hex”),但在vb net上如何处理?我停留在这个阶段:(一些代码不匹配,但我已经修复了它…xhex.Append(Asc(text(I)).ToString(“X”))和Dim xhex作为新的System.text.StringBuilder非常感谢您:D