Akhand Jyoti Ответов: 1

Я хочу преобразовать шестнадцатеричную строку в форму 0x ().


строка ввода = 019F314A
Я хочу, чтобы байт[] байт был равен { 0x01, 0x9F, 0x31, 0x4A }
Потому что я хочу сделать формат фрейма, который требовал бы таких данных.
Заранее спасибо.

Что я уже пробовал:

public static byte[] StringToByteArray(String hex)
{
  int NumberChars = hex.Length;
  byte[] bytes = new byte[NumberChars / 2];
  for (int i = 0; i < NumberChars; i += 2)
    bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
  return bytes;
}

Karthik_Mahalingam

ваш код работает нормально, в чем проблема?

Akhand Jyoti

Нет,это работает.
Я получаю результат в виде байтового массива,но не в ожидаемом виде.
Я хочу получить такой результат:
байты={ 0x01, 0x9F, 0x31, 0x4A }

1 Ответов

Рейтинг:
0

Karthik_Mahalingam

0x это просто обозначение для представления числа в виде Hex
ваша функция вернет выходной массив в виде {1,159,49,74} который является целочисленным массивом и также эквивалентен нотации каждого байта

01 -> 1
9F -> 159
31 -> 49
4A -> 74

предположим, если вы хотите, чтобы значение было в шестнадцатеричной нотации, то вам придется преобразовать это значение в строку как
string[] HexString = result.ToList().Select(k => "0x" + k.ToString("x")).ToArray();
        // { "0x1","0x9F", "0x31", "0x4A" }

что будет бесполезно, вам снова придется преобразовать его в байт для использования.
обратитесь к этому Преобразование шестнадцатеричной строки и числовые типы [^]