Создание 8-байтового массива символов

Иногда я получаю значение «0001», а иногда «10001000». Я пытаюсь преобразовать это в массив символов, используя такой код:

var array = ConvertToBinary(0x128.toString(“X”).ToCharArray();

то я использую его так:

x[6] = value[6];

Моя проблема возникает, когда я получаю «0001» только потому, что индекс не достигает 6. Таким образом, я получаю исключение индекса вне диапазона. Это моя функция ConverToBinary:

private static string ConvertToBinary(string hexString)
{
    return String.Join(String.Empty, hexString.Select(
        c => Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2).PadLeft(4, '0')
        )
    );
}

Если я изменю .PadLeft (4, '0') на .PadLeft (8, '0') и мое значение = «10001000» вместо 8 байтов, я получу 16 байтов.

Кроме того, пожалуйста, предоставьте больше контекста - вы говорите о таких значениях, как «0001» и «10001000», но до метода ConvertToBinary мы понятия не имели, что это должно быть шестнадцатеричное значение. Зачем преобразовывать _mRx[5] в шестнадцатеричную строку, если вы собираетесь преобразовать ее в другую форму? Имея больше контекста, мы, вероятно, могли бы предложить гораздо более простое решение основной задачи. (Что такое _mRx и что вы пытаетесь с ним делать?)

Jon Skeet 11.04.2018 12:20

Извините за путаницу. Я просто скопировал это из своего кода. Первоначально «значение» было шестнадцатеричным, поэтому мне нужно преобразовать его в двоичный, а затем добавить к нему нули.

stack questions 11.04.2018 13:06

Это на самом деле не отвечает на основной вопрос о том, чего вы пытаетесь достичь. Преобразование целого числа в шестнадцатеричное и последующее преобразование в двоичное звучит как очень длинный способ выяснить, установлен ли конкретный бит. Что здесь x? Какой более крупный контекст?

Jon Skeet 11.04.2018 13:07
2
3
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваше шестнадцатеричное преобразование отключено. Он рассматривает каждый символ отдельно, давая вам 15 для F и 1515 для FF.

Преобразуйте шестнадцатеричную строку целиком:

private static string ConvertToBinary(string hexString)
{
    return Convert.ToString(Convert.ToInt32(hexString, 16), 2).PadLeft(8, '0');
}

Другие вопросы по теме