我从二进制注册表项获取值时遇到问题。 到目前为止,我的代码是
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位值长度。 谢谢你!
答案 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"