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

问题描述 投票:1回答:3

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

c# binary hex
3个回答
2
投票

您的输出字符串是32位数字,所以最后一行应该是:

wo = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(32, '0');

2
投票

你只做了8个字符。如果结果字符串超过9个字符,则不会在左侧添加更多0。

你应该用4的倍数填充左边。这是4的倍数?这取决于十六进制字符串的长度。具体来说,你应该在w0.Length * 4左边填充:

w0 = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(w0.Length * 4, paddingChar);

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')));
© www.soinside.com 2019 - 2024. All rights reserved.