VB Hex到DocX对象

时间:2016-01-05 14:34:46

标签: vb.net

我选择以十六进制存储为blob数据的docx文件,我需要检索这些文件,以便我可以访问其中的文本。

到目前为止,我已使用以下内容将十六进制转换为字符串格式:

Dim blob = BLOB DATA
Dim con As String = String.Empty
For x = 2 To st.Length - 2 Step 2
    con &= ChrW(CInt("&H" & st.Substring(x, 2)))
Next

但是,如果我将此输出保存为.docx,则文件将无法打开,因为它已“损坏”。我认为这就是为什么当我将此字符串加载到内存流然后尝试使用Novacode.DocX.Load(memoryStream)时,它会给我一个类似的损坏错误。

我试过以两种方式分割成字节数组,两者都给我不同的结果。

System.Text.Encoding.Default.GetBytes(hex)

我也试过了。

Public Function HexToByteArray(hex As String) As Byte()
    Dim upperBound As Integer = hex.Length \ 2
    If hex.Length Mod 2 = 0 Then
        upperBound -= 1
    Else
        hex = "0" & hex
    End If
    Dim bytes(upperBound) As Byte
    For i As Integer = 2 To upperBound
        bytes(i) = Convert.ToByte(hex.Substring(i * 2, 2), 16)
    Next
    Return bytes
End Function

然后我尝试将它们转换为内存流并使用它们创建一个DocX对象,如下所示:

Dim doc As DocX = DocX.Load(New MemoryStream(bytes))

1 个答案:

答案 0 :(得分:0)

docx不是文本格式,它是二进制格式。因此,将其转换为字符串是完全错误的。您的最终结果必须是字节数组。

知道这一点,你的问题可以分成两个更简单的问题:

  1. 将十六进制字符串拆分为两个字符的字符串。有关详细信息,请参阅此SO问题(或保留现有的循环,这非常好):

    How to split a string by x amount of characters

  2. 将包含字节十六进制表示的“小”字符串转换为字节。有关详细信息,请参阅此SO问题:

    How do I convert a Hexidecimal string to a Byte Array?

  3. 结合这两种解决方案留给读者练习。我们不想破坏所有的乐趣或破坏学习体验。 ; - )