Üdv,
Lenne nekünk egy gépünk aminek van egy protokollja, aminek nincs meg a forráskódja,
és most kommunikálni kellene vele egy új szoftverből is, és a checksum-ot kellene
kiszámolnom.
Az alábbiak ismertek :
A checksum úgy keletkezik, hogy a karakterek értékét összeadom és hozzáadok 0xD-t.
pl.:
RDY -> R(0x52) + D(0x44) + Y(0x59) + 0xD = 0xFC ebből lesz 0xFC
SYN -> S(0x53) + Y(0x59) + N(0x4E) + 0xD = 0x107 ebből lesz 0x87
RTD -> R(0x52) + T(0x54) + D(0x44) + 0xD = 0xF7 ebből lesz 0x77
GTD -> G(0x47) + T(0x54) + D(0x44) + 0xD = 0xEC ebből lesz 0xEC
RTY1-> R(0x52) + T(0x54) + Y(0x59) + 1(0x31) + 0xD = 0x13D ebből lesz 0x3D
Ehhez vannak 8 bites regisztereink, meg carry meg overflow meg parity bitjeink.
Szóval aki kedvet érez egy kis fejtörő megoldására az írjon ide pár sort.
Előre is köszönöm mindenkinek.
Update:
Akkor a feladat pontosabb meghatározása.
Adott egy gép ami kommunikál, minden kommunikációs csomagot egy
checksum zár le, ennek a checksumnak a kiszámítása az örök bitmezőkre
távozott, és én azt a feladatot kaptam, hogy írjak egy progit
ami ezzel a géppel kommunikál, eddig minden megvan, csak az a fránya
checksum számító algoritmusom nincs meg. Ezt kell kitalálnom.
És adott az egyszerű összegzéssel kapott checksum pl. RDY esetén
0xFC, csakhogy a gép az RDY üzenet esetén checksumként a 0xFC bájtot
várja, a feladat egy olyan algoritmus amely a checksumból az 'ebből lesz'
értéket előállítja.
A 0xD valóban azért kell, mert ez a termináló karakter a protokollban.
Előre is köszi.
Update: 2 További példák
Ezek kicsit hosszúak, de az algoritmust jobban lehet rajta tesztelni.
SAT11 000007D00032000A00050014000A006400050000A0A0 00 -> 0xB4 kellene, hogy legyen
SAT139 000007D00032000A00050014000A006400050000A0A0 00 -> 0xCF kellene, hogy legyen
SAT135 000007D00032000A00050014000A006400050000A0A0 00 -> 0xCB kellene, hogy legyen
Előre is köszi.