Как преобразовать десятичное значение в шестнадцатеричной и шестнадцатеричной строках и шестнадцатеричной строке в байты - PullRequest
0 голосов
/ 06 марта 2019

У меня есть массив байтов десятичных значений, таких как [0, 4, 20, 141], и я хочу, чтобы он был преобразован в [0x00, 0x04, 0x14, 0x8D], и мне нужно использовать этот массив в качестве байтов для добавления в буфер

Текущие данные:

byte[] packet = new byte[4];

packet[0] = 0;
packet[1] = 4;
packet[2] = 20;
packet[3] = 141;

и ожидаемые данные для отправки на последовательный порт, как показано ниже:

byte[] mBuffer = new byte[4];

mBuffer[0] = 0x02;
mBuffer[1] = 0x04;
mBuffer[2] = 0x14;
mBuffer[3] = 0x8D;

Попытка:

Convert.ToByte(string.Format("{0:X}", packet[0]));

Но выдает исключение:

Входная строка была в неправильном формате.

1 Ответ

1 голос
/ 06 марта 2019

Вы получаете исключение, потому что вы пытаетесь подставить переменную в строке без префикса "$".Попробуйте это:

// Converts integer 141 to string "8D"
String parsed = String.Format($"{0:X}", packet[3]);  

Затем вы сможете преобразовать в байт, используя это:

// Parses string "8D" as a hex number, resulting in byte 0x8D (which is 141 in decimal)
Byte asByte = Byte.Parse(parsed, NumberStyles.HexNumber); 
...