Advertisement
tolikpunkoff

Main function for unpacking "Univrsal Data Format" SxGeo

Sep 23rd, 2018
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.98 KB | None | 0 0
  1.         public Dictionary<string, object> Unpack(byte[] Record, out int RealLength)
  2.         {
  3.             int Counter = 0;            
  4.             object buf = null;
  5.  
  6.             //перебираем сгенерированный ранее словарь с данными
  7.             foreach (string SxRecordName in SxTypeCodes.Keys)
  8.             {
  9.                 //вытаскиваем код типа данных
  10.                 string SxTypeCode = SxTypeCodes[SxRecordName];
  11.                
  12.                 //вытаскиваем данные в object buf
  13.                 switch (SxTypeCode[0])
  14.                 {
  15.                     case 't':
  16.                         {
  17.                             buf = GetTinuintSigned(Record, Counter);
  18.                             Counter++;
  19.                         }; break;
  20.                     case 'T':
  21.                         {
  22.                             buf = GetTinuintUnsigned(Record, Counter);
  23.                             Counter++;
  24.                         }; break;
  25.                     case 's':
  26.                         {
  27.                             buf = GetSmallintSigned(Record, Counter);
  28.                             Counter+=2;
  29.                         }; break;
  30.                     case 'S':
  31.                         {
  32.                             buf = GetSmallintUnsigned(Record, Counter);
  33.                             Counter+=2;
  34.                         }; break;
  35.                     case 'm':
  36.                         {
  37.                             buf = GetMediumintSigned(Record, Counter);
  38.                             Counter += 3;
  39.                         }; break;
  40.                     case 'M':
  41.                         {
  42.                             buf = GetMediumintUnsigned(Record, Counter);
  43.                             Counter += 3;
  44.                         }; break;
  45.                     case 'i':
  46.                         {
  47.                             buf = GetIntSigned(Record, Counter);
  48.                             Counter += 4;
  49.                         }; break;
  50.                     case 'I':
  51.                         {
  52.                             buf = GetIntUnsigned(Record, Counter);
  53.                             Counter += 4;
  54.                         }; break;
  55.                     case 'f':
  56.                         {
  57.                             buf = GetFloat(Record, Counter);
  58.                             Counter += 4;
  59.                         }; break;
  60.                     case 'd':
  61.                         {
  62.                             buf = GetDouble(Record, Counter);
  63.                             Counter += 8;
  64.                         }; break;
  65.                     case 'n':
  66.                         {
  67.                             string signs = SxTypeCode.Substring(1);
  68.                             int isigns = Convert.ToInt32(signs);
  69.                             buf = GetN16(Record, Counter, isigns);
  70.                             Counter += 2;
  71.                         }; break;
  72.                     case 'N':
  73.                         {
  74.                             string signs = SxTypeCode.Substring(1);
  75.                             int isigns = Convert.ToInt32(signs);
  76.                             buf = GetN32(Record, Counter, isigns);
  77.                             Counter += 4;
  78.                         }; break;
  79.                     case 'c':
  80.                         {
  81.                             int length = Convert.ToInt32(SxTypeCode.Substring(1));
  82.                             buf = GetFixedString(Record, Counter, length);
  83.                             Counter += length;
  84.                         }; break;
  85.                     case 'b':
  86.                         {
  87.                             string Result = "";
  88.                             Counter = GetBlob(Record, Counter ,out Result);
  89.                             buf = Result;
  90.                         }; break;
  91.                     default:
  92.                         {
  93.                             buf = null;
  94.                         }; break;
  95.                 }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement