-1

バイナリレジストリキーから値を取得するのに問題があります。これまでの私のコードは

string key = "UserPreferencesMask";
        string key_place = @"Control Panel\Desktop";
        RegistryKey root = Registry.CurrentUser;
        root = root.OpenSubKey(key_place);
        var byte_value = root.GetValue(key);
        byte[] bytearray = byte_value as byte[];
        //How can convert byte [] array to 64 bit binary string
         klase.Close();
         MessageBox.Show(binary_string);

欲しいときに積み重ねる

UserPreferencesMask

64ビットのバイナリ文字列を変換するためのバイナリレジストリキー。このようなものから

9E3E078012000000

16進値から

1001111000111110000001111000000000010010000000000000000000000000

バイナリ値

しかし、16進数から2進数に変換するコードを作成する場合、16進数に最初の1つまたは2つ以上のゼロの数値があると、誤った2進数値になります。バイナリは最初のゼロの数値なしで戻り、カウントは1の最初のバイト値から始まり、16進数が0を除く他の文字で始まった場合でもエラーは発生しません。どうすれば問題を解決できますか?どこでも検索しましたが、16進数から2進数までしか見つかりませんでしたが、これによりエラーが発生し、戻り値が64ビット値の長さではありません。ありがとう !

4

2 に答える 2

1
Converter.ToString( BitConverter.ToInt64( bytearray, 0 ), 2 ).PadLeft( 64, '0' ); 

元の番号が間違ったエンディアンである場合は、次のことを行うのは非常に簡単です。

Array.Reverse( bytearray );

最初の行を実行する前に。

于 2012-08-09T19:44:43.547 に答える
0

フォーマットを指定することにより、整数を16進値に変換できます

long x = 1207703453;
string hex = x.ToString("X16"); // "0000000047FC179D" 

これにより、常に16桁の16進値が生成されます。

これから、バイナリ表現を簡単に作成できます。辞書を使うことをお勧めします。

var hexToBinDict = new Dictionary<char, string> { 
    { '0',"0000"},
    { '1',"0001"},
    { '2',"0010"},
    { '3',"0011"},
    { '4',"0100"},
    { '5',"0101"},
    { '6',"0110"},
    { '7',"0111"},
    { '8',"1000"},
    { '9',"1001"},
    { 'A',"1010"},
    { 'B',"1011"},
    { 'C',"1100"},
    { 'D',"1101"},
    { 'E',"1110"},
    { 'F',"1111"}
};

var sb = new StringBuilder(64);
foreach (char hexdigit in hex) {
    sb.Append(hexToBinDict[hexdigit]);
}
string result = sb.ToString(); 
// "0000000000000000000000000000000001000111111111000001011110011101"
于 2012-08-09T19:43:52.070 に答える