byte []数组为64位二进制字符串

时间:2012-08-09 19:35:16

标签: c# binary bytearray converter

我从二进制注册表项获取值时遇到问题。 到目前为止,我的代码是

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位值长度。 谢谢你!

3 个答案:

答案 0 :(得分:1)

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

如果原始数字是错误的字节序,那么很容易做到:

Array.Reverse( bytearray );
在运行第一行之前

答案 1 :(得分:0)

这应该有效:

string binary_string = "";
for (int i = 0; i < byte_value.Length; i++)
{
    binary_string += Convert.ToString(byte_value[i], 2).PadLeft(8, '0');
}

除非在little-endian中byte_value,否则必须颠倒循环。

答案 2 :(得分: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"
相关问题