如何将REG_BINARY值从注册表转换为字符串? (vb.net)

时间:2008-12-08 12:45:27

标签: .net vb.net binary registry string-conversion

我有一个注册表值,它存储为包含文件路径信息的二进制值(REG_BINARY)。该值被读出为字节数组。但是我如何将其转换为可读的字符串?

我已经阅读了有关system.text.encoding.ASCII.GetString(value)但这不起作用。据我所知,注册表值是任意二进制数据而不是ASCII,这是该方法产生无用数据的原因。

有人知道如何转换数据吗?

样品: (条目的一部分)

01 00 00 00 94 00 00 00 14 00 00 00 63 00 3A 00 5C 00 
70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 6d 00 65 00 
5C 00 67 00 65 00 6D 00 65 00 69 00 6E 00 73 00 61 00 
6D 00 65 00 20 00 64 00 61 00 74 00 65 00 69 00 65 00 
6E 00 5C

由于regedit,这应该是:

............c.:.\.p.r.o.g.r.a.m.m.e.\.g.e.m.e.i.n.s.a.m.e. .d.a.t.e.i.e.n.\

条目本身是从Outlook创建的。这是禁用的插件项(弹性)

的条目

3 个答案:

答案 0 :(得分:4)

嗯,它不是任意二进制数据 - 它是一些种编码中的文本数据。您需要找出编码是什么。

如果Encoding.Unicode.GetString(value)有效,我不会感到惊讶 - 但如果没有,请发一个样本(十六进制),我会看到我能做什么。什么把数据放在那里的文件说什么?

编辑:看起来像Encoding.Unicode是你的朋友,但从字节12开始。使用

Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)

答案 1 :(得分:1)

我也有这个问题,我就这样解决了:

我已将变量声明为:

Dim encoding As System.Text.Encoding = System.Text.Encoding.Unicode

然后我循环执行此操作:

    For Each Val As String In ValueName
        data = k.GetValue(Val)
        ListRecent.Items.Add(Val & ": " & encoding.GetString(data))
    Next

所以在名为“ListRecent”的列表框中,我已经获得了最近的完整列表

答案 2 :(得分:0)

使用

Function Microsoft.Win32.RegistryKey.GetValue(name as String) as Object

另请参阅System.Text.EncodingSystem.Text.Encoding.Unicode