Joah, im Titel ist bereits alles genannt. Es reicht bereits ein Eingabefeld, in die ich die Nachricht eingebe (Bsp.: 06 00 0e 00 00 00 9e 09 78 06 06 26 04 0a 02 06 d3 03) und ein Ausgabefeld, in der dann die Checksum steht (hier: d3 01 für KERMIT bzw CCITT-TRUE).
Ich möchte bei der Eingabe mittels dropdown wählen können, ob die Eingabe in HEX, BIN oder DEC geschieht.
Ich weiß, dass die Coder gerne Preise sehen wollen. Ich kann die Arbeit jedoch nicht einschätzen. Deshalb muss ich mich hier mal mit Preisen per PN zutexten lassen
Anforderungen: es sollte ab php 5.4 sein, nicht älter. Bei Fragen einfach fragen
- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -
Hier noch ein Nachtrag:
Es gibt bereits Code für crc16. Allerdings für CRC-CCIT FALSE. Hier müsste aber vor dem down-shifting das lowbit geprüft werden. Allerdings bekomme ich das nicht hin, da ich das nicht so recht verstehe.
PHP-Code:<?php
// CCITT, X24
define(CRC16POLYN,0x1021);
define(CRC16POLYI,0x8408);
// for "STANDARD" use 0x8005 and 0xA001
function CRC16Normal($buffer) {
$result = 0xFFFF;
if ( ($length = strlen($buffer)) > 0) {
for ($offset = 0; $offset < $length; $offset++) {
$result ^= (ord($buffer[$offset]) << 8);
for ($bitwise = 0; $bitwise < 8; $bitwise++) {
if (($result <<= 1) & 0x10000) $result ^= CRC16POLYN;
$result &= 0xFFFF; /* gut the overflow as php has no 16 bit types */
}
}
}
return $result;
}
function CRC16Inverse($buffer) {
$result = 0xFFFF;
if ( ($length = strlen($buffer)) > 0) {
for ($offset = 0; $offset < $length; $offset++) {
$result ^= ord($buffer[$offset]);
for ($bitwise = 0; $bitwise < 8; $bitwise++) {
$lowBit = $result & 0x0001;
$result >>= 1;
if ($lowBit) $result ^= CRC16POLYI;
}
}
}
return $result;
}
echo '
0x',dechex(CRC16Normal('06000e0000009e0978060626040a0206d303')),' == 0xd301<br />
<br />
0x',dechex(CRC16Inverse('06000e0000009e0978060626040a0206d303')),' == 0xd301<br />
?>






Zitieren