Pergunta

Eu tenho um valor de registro que é armazenado como um valor binário (REG_BINARY) segurando informações sobre um caminho de arquivo. O valor é lido para fora a uma matriz de bytes. Mas como posso transformá-lo em uma string legível?

Eu li sobre system.text.encoding.ASCII.GetString (valor), mas isso não funciona. Tanto quanto eu tenho que saber o valor do registro é arbitrária dados binários e não ASCII que é a razão para o método para produzir dados inúteis.

Alguém sabe como posso converter os dados?

Amostra: (A peça da entrada)

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

Devido à regedit isto é suposto ser:

............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.\

A entrada em si foi criado a partir do Outlook. É uma entrada para um item suplemento desativado (resiliência)

Foi útil?

Solução

Bem, não é arbitrária dados binários - é dados de texto em alguns tipo de codificação. Você precisa descobrir o que a codificação é.

Eu não ficaria surpreso se Encoding.Unicode.GetString(value) funcionou - mas se isso não acontecer, por favor postar uma amostra (em hex) e eu vou ver o que posso fazer. O que a documentação de tudo o que é colocar os dados lá dizer?

EDIT: Parece que Encoding.Unicode é seu amigo, mas a partir de byte 12. Use

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

Outras dicas

Eu tive esse problema também e eu resolvido desta maneira:

Eu havia declarado uma variável como:

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

Então eu fazer isso em um loop:

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

Assim, em caixa de listagem denominado "ListRecent" Obtive a lista completa das recentes

Use

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

Também olhar para System.Text.Encoding e System.Text.Encoding.Unicode

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top