Преобразование шестнадцатеричной строки в двоичную строку - PullRequest
1 голос
/ 02 апреля 2019

у меня 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", как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 02 апреля 2019

Ваша выходная строка является 32-битным числом, поэтому последняя строка должна быть:

wo = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(32, '0');
2 голосов
/ 02 апреля 2019

Вы сделали только 8 символов. Если длина получаемой строки превышает 9 символов, слева от нее больше не будет нуля.

Вместо этого вы должны дополнить левый кратным 4. Какой кратный 4? Это зависит от длины шестнадцатеричной строки. В частности, вы должны заполнить влево w0.Length * 4:

w0 = Convert.ToString(Convert.ToInt32(w0, 16), 2).PadLeft(w0.Length * 4, paddingChar);
2 голосов
/ 02 апреля 2019

Давайте преобразуем каждый 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')));
...