Как я могу преобразовать значение REG_BINARY из реестра в строку ?(vb.net)

StackOverflow https://stackoverflow.com/questions/349410

Вопрос

У меня есть значение реестра, которое хранится в виде двоичного значения (REG_BINARY), содержащего информацию о пути к файлу.Значение считывается в массив байтов.Но как я могу преобразовать его в читаемую строку?

Я читал о system.text.encoding.ASCII.getString(значение), но это не работает.Насколько я узнал, значение реестра - это произвольные двоичные данные, а не 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.Это запись для отключенного дополнительного элемента (отказоустойчивость).

Это было полезно?

Решение

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

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

Редактировать:Это похоже на кодировку.Юникод - ваш друг, но начинается с 12-го байта.Использование

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

Другие советы

У меня тоже была эта проблема, и я решил ее таким образом:

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

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

Использование

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top