Как я могу расшифровать раздел CDATA различных XML-файлов, имеющих различные datawidth, равное
<?xml version="1.0" encoding="UTF-8"?> <TesterLog Version="1"> <TestProperties> <Item name="IUT Name" value="Reference"/> </TestProperties> <SignalData SamplingPeriod="1000.000 ns" DataWidth="16 bit"> <Signal> <Id>IUT_RX</Id> <InitState>1</InitState> <![CDATA[HQFPAVkBiwGVAZ8BqQHHAdEBAwINAjUCPwJxAnsCrQK3AsEC1QLzAv0CEQMbAzkDTQNrA3UDfwOJA7sDxQPtA/cDKQQzBEcEUQSDBI0EtQTJBN0E5wTxBAUFDwUZBS0FNwVBBUsFVQWHFZEVmxWlFa8VuRXDFc0V1xXhFesV9RX/FTEWOxZFFk8WgRaLFpUWnxapFscW0RbbFuUW7xYDFyEXPxdJF1MXGhgkGC4YTBhWGHQYfhiwGLoY2BjiGBQZHhkoGTIZUBlaGXgZghmgGaoZvhnbGeUZ9RwTHR0dTx1ZHYsdlR29Hccd+R0DHg0eFx5JHlMeZx6ZHsEe6R4lH5Qfsh+8H+4f+B8qIDQgXCBmIJggoiCsILYg6CDyIAYhOCFgIYghxCEzIlEiWyKNIpciySLTIvsiBSM3I0EjSyNVI4cjmyOlI9cj/yMTJB0kpyaxJrsmxSbPJgEnCyc9J0cnZSdvJ6EnqyfdJ+cnGSgjKC0oQShLKF8ocyiHKJsopSivKLkowyjWKOAo8jQkNS41YDVqNZw1pjXENc41ADYKNhQ2HjZGNlA2WjZkNm42eDaWNqo2tDbHNtE2uDd=]]> </Signal> <Signal> <Id>CCT_TX</Id> <InitState>1</InitState> <![CDATA[HQFPAVkBiwGVAZ8BqQHHAdEBAwINAjUCPwJxAnsCrQK3AsEC1QLzAv0CEQMbAzkDTQNrA3UDfwOJA7sDxQPtA/cDKQQzBEcEUQSDBI0EtQTJBN0E5wTxBAUFDwUZBS0FNwVBBUkXUxfbGeUZ1ijgKMc20Ta4N0==]]> </Signal> ////////////////////////////////////////////////////////////////////////////////////////////////////// </SignalData> </TesterLog>
это мой xml-файл. я в состоянии прочитать информацию. но мой код очень статичен. он декодирует только те xml-файлы, в которых DataWidth составляет 16 бит. DataWidth-это атрибут элемента SignalData. Я хочу, чтобы мой код был таким образом, чтобы он работал для каждого типа DataWidth. e.g 8,16,24,32,40,48.... 64 и т. д.
Что я уже пробовал:
byte[] data = Convert.FromBase64String(cData);
int oldResult = 1;
ushort[] arr16 = new ushort[data.Length];
for (int i = 0; i < arr16.Length; i++) { arr16[i] = data[i]; }
for (int i = 0; i < arr16.Length; i += 2) { var resultant = (arr16[i]) | (arr16[i + 1] << 8); //285 is the transition state.. As in xml file the initial state is 1 give. so signal will remain 1 till 284. on 285 signal becomes 0 and it will remain 0 before we reach another transition state... this will keep on doing like that.
for (int j = oldResult; j < resultant; j++) { Console.Write(initialState); // printing signal value. it can be either 1 or 0 } if (initialState == 1) initialState = 0; else initialState = 1; oldResult = resultant; } Console.WriteLine();