2

我有一个注册表值,它存储为二进制值 (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

由于注册表编辑器,这应该是:

............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 创建的。这是一个禁用插件项目(弹性)的条目

4

3 回答 3

4

好吧,它不是任意的二进制数据——它是某种编码的文本数据。您需要找出编码是什么。

如果工作,我不会感到惊讶Encoding.Unicode.GetString(value)- 但如果没有,请发布一个样本(十六进制),我会看看我能做什么。将数据放入其中的文件说明了什么?

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

Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)
于 2008-12-08T12:52:46.913 回答
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”的列表框中,我获得了最近的完整列表

于 2010-04-01T05:55:27.243 回答
0

采用

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

也看看System.Text.EncodingSystem.Text.Encoding.Unicode

于 2008-12-08T13:04:50.243 回答