Akhand Jyoti Ответов: 2

Как я могу преобразовать escape-последовательность unicode в шестнадцатеричную форму.я получаю данные через zigbee из последовательного порта.


Я получаю данные из последовательного порта в форме, приведенной ниже.
"~\0\u0016?\0\u0013?\0AT??\\?\u0001#yfgyhvkh#?"

И те же данные в программном обеспечении XCTU, которые я получаю .
7E 00 15 90 00 13 A2 00 41 54 EC 8E 5C 9F 01 23 31 32 23 31 32 23 52 23 0B

Может ли кто-нибудь дать мне какой-нибудь код или алгоритм, как преобразовать эту полученную строку в шестнадцатеричную.
Я перепробовал много методов, но это не преобразование.Заранее большое вам спасибо.

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

строка unicode = "\0\u0016?\0\u0013?\0AT??\\?\u0001#yfgyhvkh#";
системы строку стр =.Ури.UnescapeDataString(Юникод);

2 Ответов

Рейтинг:
17

OriginalGriff

Просто: не считывайте его из последовательного порта в виде строки.
Считайте его как байты, используя Метод SerialPort.Read (Byte[], Int32, Int32) (System.IO.Ports)[^] и каждое отдельное значение из устройства будет поступать как отдельное байтовое значение без перевода в Юникод.

Если вам нужно, вы можете преобразовать массив байтов в шестнадцатеричную строку с помощью Метода bitconverter.Метод toString[^]


Akhand Jyoti

Поблагодарить у так много .Это сработало для меня.Я просто получил данные в виде байта из порта и взял в строку, которая работала.Я получил ожидаемый результат.поблагодарить у так много.
Вот этот код.
int bytes = serialPort2.BytesToRead;
byte[] array = новый байт[байты];
int i = 0;
while (serialPort2.BytesToRead > 0)
{
array[i] = преобразовать.ToByte(serialPort2.ReadByte());
я++;
}

строка s = BitConverter.ToString(массив);

Рейтинг:
10

CPallini

То SerialPort компонент предоставляет методы для чтения массив байтов вместо строки- Вы должны их использовать. Тогда представление массива байтов шестнадцатеричными строками тривиально (см., например: c# - как преобразовать массив байтов в шестнадцатеричную строку и наоборот? - переполнение стека[^]).