За последние 24 часа нас посетили 18617 программистов и 1623 робота. Сейчас ищут 1705 программистов ...

подскажите как разобрать числа по Си'шной структурке

Тема в разделе "Прочие вопросы по PHP", создана пользователем _sharky_, 10 янв 2009.

  1. _sharky_

    _sharky_ Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    8
    Симпатии:
    0
    имеется набор чисел и структурка к этим числам написаная на C++
    мне нужно разобрать числа вида:
    Код (Text):
    1.  
    2. 136959
    3. 118228493
    4. 39847173
    5. 4656386
    6. 2821379
    7. 3347034
    8. 36964615
    9. 136212
    10. 2821380
    11. 6230537
    12. и т.п.
    структурка C++ выглядит так:
    Код (Text):
    1.  
    2. struct _INVENKEY
    3. {
    4.     BYTE bySlotIndex;  
    5.     BYTE byTableCode;
    6.     WORD wItemIndex;
    7. };
    как я понял на пхп нужно эти числа перегнать в хекс а потом посимвольно разбирать т.к. по структуре они должны быть одинаковы, но это действует не во всех случаях, к примеру число 136959 в хексе это 216ff. И каким образом подобные числа разбирать, я так и непонял.
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    как-то так:
    PHP:
    1. <?php
    2. print_r(unpack('cbySlotIndex/cbyTableCode/swItemIndex', 6230537));
     
  3. _sharky_

    _sharky_ Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    8
    Симпатии:
    0
    нет, функция не так как нужно разбивает числа.
    cbySlotIndex должен быть в пределах от 0 до 99
    cbyTableCode - от 0 до 24
    swItemIndex - от 0 до ~9500

    и ещё 1 ньюанс: числа записываются задом наперёд - т.е. первые 4 байта - это swItemIndex вторые 2б. cbyTableCode и третие 2б. - cbySlotIndex
     
  4. _sharky_

    _sharky_ Активный пользователь

    С нами с:
    10 янв 2009
    Сообщения:
    8
    Симпатии:
    0
    всё, решил эту задачу таким путём:

    PHP:
    1.  
    2. <?php
    3.  
    4. function getii($ii) {
    5.  
    6. $hexv=dechex($ii);
    7.  
    8. switch (strlen($hexv)) {
    9. case 4:
    10. $hexv="0000".$hexv;
    11. break;
    12.  
    13. case 5:
    14. $hexv="000".$hexv;
    15. break;
    16.  
    17. case 6:
    18. $hexv="00".$hexv;
    19. break;
    20.  
    21. case 7:
    22. $hexv="0".$hexv;
    23. break;
    24. }
    25.  
    26. $asd=$hexv;
    27.  
    28. $r['code']=hexdec($asd[0].$asd[1].$asd[2].$asd[3]);
    29. $r['type']=hexdec($asd[4].$asd[5]);
    30. $r['slot']=hexdec($asd[6].$asd[7]);
    31.  
    32. return $r;
    33. }
    34.  
    35.  
    36. ?>