Как я могу преобразовать значение REG_BINARY из реестра в строку? (Vb.net) - PullRequest
2 голосов
/ 08 декабря 2008

У меня есть значение реестра, которое хранится в виде двоичного значения (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 ]

4 голосов
/ 08 декабря 2008

Ну, это не произвольные двоичные данные - это текстовые данные в некотором виде кодирования. Вам нужно выяснить, что такое кодировка.

Я не удивлюсь, если Encoding.Unicode.GetString(value) сработает, но если это не сработает, пожалуйста, опубликуйте образец (в шестнадцатеричном формате), и я посмотрю, что я могу сделать. О чем говорит документация того, кто поместил туда данные?

РЕДАКТИРОВАТЬ: похоже, Encoding.Unicode ваш друг, но начиная с байта 12. Используйте

Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)
1 голос
/ 01 апреля 2010

У меня тоже была эта проблема, и я решил следующим образом:

Я объявил переменную как:

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» я получил полный список последних

0 голосов
/ 08 декабря 2008

Используйте

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

Также посмотрите на System.Text.Encoding и System.Text.Encoding.Unicode

...