За последние 24 часа нас посетили 18502 программиста и 1577 роботов. Сейчас ищут 1123 программиста ...

XOR массива чисел

Тема в разделе "PHP для новичков", создана пользователем ser8191, 3 фев 2024.

  1. ser8191

    ser8191 Новичок

    С нами с:
    20 янв 2022
    Сообщения:
    7
    Симпатии:
    0
    Здравствуйте.
    Нужна помощь.
    Код (Text):
    1. <?php  
    2.  
    3. $text = "2,37,35,30,30,38,33,43,43,33,31,30,42,3"; //Получаемый текст
    4. $arr_code = explode(",", $text);//Массив байт
    5. $count_arr = count($arr_code);//Число элементов в массиве
    6.  
    7. /* HEX(37)= CHR(7), HEX(35)= CHR(5)...ASCII*/
    8. function hex2str($hex) {
    9.     $str = '';
    10.     for($i=0;$i<strlen($hex);$i+=2) $str .= chr(hexdec(substr($hex,$i,2)));
    11.     return $str;
    12. }
    13.  
    14. $arr_chr=[];//Массив CHR
    15.  
    16. for ($i = 0; $i <= $count_arr; $i++) {
    17.     $arr_chr[$i] = hex2str($arr_code[$i]);
    18.     echo $arr_chr[$i];
    19. }
    20. echo "<br>";
    21.  
    22.  
    23. for ($i = 3; $i <= 6; $i++) {
    24. $series =$series. $arr_chr[$i];
    25. }
    26.  
    27. for ($i = 7; $i <= 10; $i++) {
    28. $number =$number. $arr_chr[$i];
    29. }
    30.  
    31. $check_sum = $arr_chr[11].$arr_chr[12];
    32.  
    33.  
    34.  
    35. echo "Серия: ".hexdec($series);
    36. echo "<br>";
    37. echo "Номер: ".hexdec($number);
    38. echo "<br>";
    39. echo "Контрольная сумма: ".hexdec($check_sum);
    40. echo "<br>";
    41.  
    42.  
    43. ?>

    750083CC310B
    Серия: 131
    Номер: 52273
    Контрольная сумма: 11

    0B - это контрольная сумма (11)
    37 35 30 30 38 33 43 43 33 31 через XOR дают 0x0B
    Как это посчитать в коде?
     
    #1 ser8191, 3 фев 2024
    Последнее редактирование: 3 фев 2024
  2. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    425
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    это в коде
    PHP:
    1. <?
    2. $str = "37353030383343433331";
    3. $checksum = $str[0];
    4. $i = strlen($str);
    5. while (--$i)
    6.     $checksum ^= $str[$i];
    7. ####################################
    8. $decimal = ord($checksum);
    9. $hex = strtoupper(str_pad(dechex($decimal), 2, 0, STR_PAD_LEFT));
    10. echo "checksum decimal: ", $decimal,  " hex: ", $hex;
    11. /*
    12. checksum decimal: 11 hex: 0B
    13. */
    14. ?>
    Удачи!
     
    ser8191 нравится это.
  3. ser8191

    ser8191 Новичок

    С нами с:
    20 янв 2022
    Сообщения:
    7
    Симпатии:
    0
    Спасибо