Akhand Jyoti Ответов: 1

Как я могу получить mac - адрес из полученной строки ascii через zigbee.my проект основан на приложении оконной формы C#.


Я работаю над проектом,в котором мы пытаемся передавать данные из zigbee в формате API,но при получении данных из последовательного порта в программном обеспечении приемный выход не совпадает с выходом, получаемым в программном обеспечении xctu.Может ли кто-нибудь помочь мне в расшифровке полученных данных.Я попытался преобразовать полученные данные из ascii как в Big endian, так и в small, что у меня не получилось.Пожалуйста, кто-нибудь может мне помочь.Я посылаю данные в кадре, где .Заранее большое вам спасибо.

1.Получение данных в виде ascii, как это.
"~\0\u0015?\0\u0013?\0AT??\\?\u0001#12#12#R#\v"
2.я хочу получить mac-адрес, который является 64-битным в строке от 6-го до 13-го байта.
3.преобразование полученных данных в hexa.
"7e00153f00133f0041543f3f5c3f012331322331322352230b"
4.те же данные, полученные в программном обеспечении 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

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

текст = serialPort2.ReadExisting();
byte[] LogoDataBy = ASCIIEncoding.ASCII.GetBytes(текст);
string wholeframe = ByteArrayToString(LogoDataBy);
var arr = LogoDataBy.Skip(5).Take(8).Метод toArray();

строка macaddress = ByteArrayToString(arr);

1 Ответов

Рейтинг:
0

Jeremy Falcon

То, что вы видите в этой входной строке, - это escape-последовательности Юникода. Поэтому вы должны избавиться от них. Поскольку мы имеем дело с байтовыми массивами, хотя и не широкими символами (двухбайтовые массивы), мы затем преобразуем их в ascii после un-Escape, чтобы получить конечный результат в байтовом массиве. Итак, попробуйте что-нибудь вроде этого...

static void Main(string[] args)
{
   // do not use the @ literal here
   var encodedString = "~\0\u0015?\0\u0013?\0AT??\\?\u0001#12#12#R#\v";

   // create two different encodings
   var ascii = Encoding.ASCII;
   var unicode = Encoding.Unicode;

   // asciiBytes will have your MAC address in decimal
   byte[] unicodeBytes = unicode.GetBytes(encodedString);
   byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

   // show the MAC address in hex
   Console.WriteLine(BitConverter.ToString(asciiBytes));
   Console.ReadLine();
}


Akhand Jyoti

Большое вам спасибо за ваш ответ.Но этот ответ не дает того, чего я хочу.
когда я конвертирую asciiByte в hex, я получаю тот же результат, что и предыдущий.
после преобразования всей escape-последовательности unicode результат должен выглядеть следующим образом.
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