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

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から作成されました。無効になっているアドインアイテムのエントリです(復元力)

4

3 に答える 3

4

まあ、それは任意のバイナリデータではありません-それはある種のエンコーディングのテキストデータです。エンコーディングが何であるかを知る必要があります。

うまくいったとしても驚かないでしょうがEncoding.Unicode.GetString(value)、うまくいかない場合は、サンプル(16進数)を投稿してください。私に何ができるかを見ていきます。そこにデータを入れているもののドキュメントは何と言っていますか?

編集: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 に答える