我有string
w0 = "2B7E1516"
我想将它转换为二进制string
才能成为
"00101011011111100001010100010110"
但是我一直只得到"101011011111100001010100010110"
:
w0 = "2B7E1516";
char paddingChar = '0';
w0 = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(8, paddingChar);
问题是在2
它将它转换为"10"
而不是"0010"
,我该如何解决这个问题?
您的输出字符串是32位数字,所以最后一行应该是:
wo = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(32, '0');
你只做了8个字符。如果结果字符串超过9个字符,则不会在左侧添加更多0。
你应该用4的倍数填充左边。这是4的倍数?这取决于十六进制字符串的长度。具体来说,你应该在w0.Length * 4
左边填充:
w0 = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(w0.Length * 4, paddingChar);
让我们用填充到char
数字转换string
中的每个4
:
'0' -> "0" -> "0000"
'1' -> "1" -> "0001"
'2' -> "10" -> "0010"
...
'F' -> "1111" -> "FFFF"
码:
string w0 = "2B7E1516";
// Since we convert string char by char the initial string can be arbitrary long
string result = string.Concat(w0.Select(c =>
('0' <= c && c <= '9' ? Convert.ToString(c - '0', 2) :
'a' <= c && c <= 'f' ? Convert.ToString(c - 'a' + 10, 2) :
Convert.ToString(c - 'A' + 10, 2)).PadLeft(4, '0')));