Python unpack('i') питоновская анпак integer моя реализация - C#

Узнай цену своей работы

Формулировка задачи:

Предыстория с задачей: Возникла задача разобрать на C# бинарный файл с данными. недолго думая "великий" гуглопоиск выдал ссылку на питоновский файлик разбора подобного файла. Взяв в руки учебник на python решил накатать самые простые вещи. Ну что бы не ломать голову как это по другому сделать. В итоге вот что получилось: в тексте на питоне очень много было таких строк
Листинг программы
  1. ...
  2. xblock = unpack('i', s[p : p + 4])[0]
  3. ...
где s - массив байтов (вообщем содержимое файлика) а p это счетчик от 0 до размера массива s. unpack распаковывает данные по указанному формату. запись unpack('формат', массив), в данном случае формат = i, i - integer. не долго думая вот что получилось. в данном случае pyUnpackToInt(массивбайтизфайла, индекс с короторо начинам читать, сколько читать)
Листинг программы
  1. public static int pyUnpackToInt(byte[] fileByteArray, int istart, int readbyte)
  2. {
  3. int Resault = 0;
  4. byte[] buff2 = new byte[readbyte];
  5. string tempResault;
  6. readbyte = readbyte - 1;
  7. tempResault = "";
  8. /// переворачиваем данные в обратном порядке (так как в файле все данные перевернуты
  9. for (int j = 0; j <= readbyte / 2; j++)
  10. {
  11. buff2[readbyte - j] = fileByteArray[istart + j];
  12. }
  13. // собираем все в строку как hex и уже строку переводим в десятичное число
  14. for (int i = 0; i <= readbyte; i++)
  15. {
  16. tempResault = tempResault + buff2[i].ToString("X");
  17. }
  18. Resault = System.Convert.ToInt32(tempResault, 16);
  19. return Resault;
  20. }
ну и вызов
Листинг программы
  1. ...
  2. int xblock = pyUnpackToInt(fileBytes, p, 4);
  3. ...
Хотелось бы услышать ваше мнение. И чуть позже выложу реализацию во float и string если интересно. Заранее благодарен.

Решение задачи: «Python unpack('i') питоновская анпак integer моя реализация»

textual
Листинг программы
  1.         public static void Main(string[] args)
  2.         {
  3.             Console.WriteLine(BigEndianToLittleEndian(new byte[] {12, 09, 00, 00}, 0));
  4.         }
  5.  
  6.         private static int BigEndianToLittleEndian(byte[] byteArray, int startPos)
  7.         {
  8.             int result;
  9.  
  10.             result = HexToBin(byteArray[startPos]) << 0;
  11.             result |= HexToBin(byteArray[startPos + 1]) << 8;
  12.             result |= HexToBin(byteArray[startPos + 2]) << 16;
  13.             result |= HexToBin(byteArray[startPos + 3]) << 24;
  14.  
  15.             return result;
  16.         }
  17.  
  18.         private static int HexToBin(int hex)
  19.         {
  20.             return 16 * (hex / 10) + (hex % 10);
  21.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы