将十六进制字符串转换为二进制字符串

时间:2019-04-02 09:51:11

标签: c# binary hex

我有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",我该如何解决?

3 个答案:

答案 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);