【问题标题】:Converting a hexdecimal string to binary string将十六进制字符串转换为二进制字符串
【发布时间】:2019-08-23 14:27:00
【问题描述】:

我有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


    【解决方案1】:

    你的输出字符串是一个 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);
      

      【讨论】:

        【解决方案3】:

        让我们将string 中的每个char 转换为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')));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-23
          • 2014-08-03
          • 2015-06-21
          • 2014-10-24
          • 2012-03-04
          • 2015-06-27
          • 1970-01-01
          相关资源
          最近更新 更多