-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

十六进制值

1001111000111110000001111000000000010010000000000000000000000000

二进制值

但是,如果我构建从十六进制转换为二进制的代码,如果十六进制数字中的前一个或两个或多个零数字,我的二进制值就会出错。二进制返回没有第一个零数字,仅从第一个字节值开始计数 1 ,如果十六进制以任何其他字符开头没有错误,除了 0 我该如何解决问题?我到处搜索,但我发现只有十六进制到二进制。,但这对我来说会导致错误,并且返回的值不是 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

您可以通过指定格式将整数转换为十六进制值

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

这将始终产生一个 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 回答