Контрольная сумма

teandr

Новичок
Доброго времени суток !

Пишу генератор GPS данных. Все данные (широта, долгота, количество спутников, высота над морем, время и все такое...) представлены в виде записи в текстовом файле с разделителями в виде запятой. И последний параметр в этой записи являеться [Контрольная сумма]. Дословно из спецификации:
'Контрольная сумма: 8-битовая сумма (XOR) ASCII кодов всех символов (включая ',') в выражении между символами '$' и '*' (исключая их). результат сложения записываеться в явном виде после '*'.'
Вот несколько 'правильных' строк с правильными значения Контрольной суммы:
$GPRMC,164336.000,A,5020.0531,N,00845.4969,E,8.63, ,260104,,*1F
$GPRMC,164348.000,A,5020.0728,N,00845.5270,E,7.55, ,260104,,*14
$GPRMC,164513.000,A,5020.0991,N,00845.5414,E,18.35 ,,260104,,*2C
$GPRMC,164520.000,A,5020.1251,N,00845.5174,E,15.65 ,,260104,,*21
$GPRMC,164541.000,A,5020.1288,N,00845.4716,E,18.89 ,,260104,,*2E
$GPRMC,164546.000,A,5020.1144,N,00845.4348,E,20.50 ,,260104,,*2A
То, что идет за '*' - и есть контрольная сумма.
У меня есть все значения этой строки. Теперь нужна функция по расчету этой Контрольной суммы, потому как без нее, ни одна программа по визуализации данных с GPS приемника эти строки не примет.

Возможен ли расчет этой суммы средствами php ?
 

teandr

Новичок
Вот рабочий код на Visual Basic:

Код:
Sub Main()
    Dim st As String, sCode As Byte, i As Integer, sum As Byte
    
    st = 'GPRMC,164336.000,A,5020.0531,N,00845.4969,E,8.63,,260104,,'
    sum = Asc(Mid$(st, 1, 1))
    For i = 2 To Len(st)
        sCode = Asc(Mid$(st, i, 1))
        sum = sum Xor sCode
    Next i
    Debug.Print sum  ' напечатает 31, т.е. 1F
End Sub
 

antson

Новичок
Партнер клуба
возможен. mid$ - substr . Остальное в документации легко находится , так как практически совпадает
 

dadoc

Новичок
вот рабочий код на php:
PHP:
$s = "GPRMC,164336.000,A,5020.0531,N,00845.4969,E,8.63,,260104,,";
$r = $s[0]; $i = strlen($s);
while (--$i) 
	$r = $r ^ $s[$i];
echo dechex(ord($r));
 
Сверху