我有string
w0 = "2B7E1516"
我想将其转换为 binary string
以便成为
"00101011011111100001010100010110"
但是我一直只收到"101011011111100001010100010110"
:
w0 = "2B7E1516";
char paddingChar = '0';
w0 = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(8, paddingChar);
问题出在2
中,它只能将其转换为"10"
而不是"0010"
,我该如何解决?
答案 0 :(得分:2)
让我们将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')));
答案 1 :(得分:2)
您的输出字符串是32位数字,因此最后一行应该是:
wo = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(32, '0');
答案 2 :(得分:2)
您只使它向左填充了8个字符。如果生成的字符串超过9个字符,则不会在左侧添加更多0。
您应该向左填充4的倍数。这取决于十六进制字符串的长度。具体来说,您应该在w0.Length * 4
处向左移:
w0 = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(w0.Length * 4, paddingChar);