Domanda

Ho un valore di registro che viene archiviato come valore binario (REG_BINARY) contenente informazioni su un percorso file. Il valore viene letto in un array di byte. Ma come posso trasformarlo in una stringa leggibile?

Ho letto di system.text.encoding.ASCII.GetString (valore) ma questo non funziona. Per quanto mi è venuto in mente che il valore del registro sono dati binari arbitrari e non ASCII, motivo per cui il metodo produce dati inutili.

Qualcuno sa come posso convertire i dati?

Esempio: (Un pezzo della voce)

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

A causa della regedit questo dovrebbe essere:

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

La voce stessa è stata creata da Outlook. È una voce per un elemento aggiuntivo disabilitato (resilienza)

È stato utile?

Soluzione

Beh, non sono dati binari arbitrari - sono dati di testo in alcuni tipi di codifica. Devi scoprire qual è la codifica.

Non sarei sorpreso se Encoding.Unicode.GetString (valore) funzionasse - ma in caso contrario, pubblica un campione (in esadecimale) e vedrò cosa posso fare. Cosa dice la documentazione di qualunque cosa i dati ci siano?

EDIT: sembra che Encoding.Unicode sia tuo amico, ma a partire dal byte 12. Usa

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

Altri suggerimenti

Ho avuto anche questo problema e ho risolto in questo modo:

Avevo dichiarato una variabile come:

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

Quindi lo faccio in un ciclo:

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

Quindi nella casella di riepilogo chiamata " ListRecent " Ho ottenuto l'elenco completo dei recenti

Usa

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

Guarda anche System.Text.Encoding e System.Text.Encoding.Unicode

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top