Olen ohjelmoija ja minun on lähetettävä tietoja koneelle, mutta minun on lisättävä tarkistussumma tietojen loppuun . Voisiko joku näyttää minulle esimerkin siitä, miten se tehdään, jotta voisin kirjoittaa ohjelman laskemaan tarkistussumman minulle.

Säännöt: 1 tavun tavuiden bittien kääntäminen bittimerkillä, jotka alkavat merkittävimmällä osoitetavulla ja päättyy tarkistussummaa edeltävään tavuun. (Suorita bittikohtainen kääntäminen ”yksinoikeudella TAI” yhden tavun summa FF-heksalla.)

Kiitos

Kommentit

  • Mitä tekemistä tällä on tagilla: power-electronics?

Vastaa

Määritelmä melko hyvin peittää sen.

1 tavun tavujen summan bittisuuntainen kääntäminen, joka alkaa merkittävimmällä osoitetavulla ja päättyy tarkistussummaa edeltävällä tavulla. (Suorita bittikohtainen kääntäminen ”yksinoikeudella TAI” yhden tavun summa FF-heksalla.)

Esimerkki

  • Viesti ”Hei” = Hex: 48 65 6C 6C 6F.
  • Lisäämällä nämä Windows Calc.exe -ohjelmassa ohjelmointitilassa saan & h01F4.
  • Ota viimeinen tavu ja ohita kaikki muu: & hF4.
  • & hF4 XOR & hFF = & h0B – tarkistussumma.

Viimeisen bitin selventämiseksi:

&hF4 = 1111 0100 &hFF = 1111 1111 --------- XOR = 0000 1011 = &h0B 

Päivitä

Jostain syystä se ei toimi minulle. Täällä minulla on CA 00 01 70 00, lisätään ne yhteen saadaksesi 13B, otan viimeisen tavun, joka on 3B ja XOR FF: n kanssa, sitten saan c4, joka eroaa 8E: stä (esimerkki sain käsikirjasta). Kaipaanko jotain säännöstä?

Sääntöä koskeva verkkohaku heitti asiakirjan osoitteesta NESLAB . Sivulta B-2 luemme:

kirjoita kuvan kuvaus tähän

Kuva 1. Tarkistussummassa käytetään vain tarkistussumma-aluetta.

Tämän pitäisi selittää hämmennystäsi. Päämerkki ei sisälly laskelmaan. Nyt kun tarkistamme CA 00 01 70 00: n, voimme pudottaa CA: n ja jäljellä on muutama nolla, 01 ja 70, jotka ovat & h71.

& h71 XOR & FF = & h8E. Voila!

Kommentit

  • Kiitos. Olin hämmentynyt " tavujen 1 tavun summan bittimuunnoksesta ". En tiennyt, että viimeisen tavun ottaminen tarkoittaa, mutta sinä selvitit sen. Kiitos paljon !!
  • On vain utelias, miksi XOR h ' FF: n kanssa? Eikö ' t ole sama kuin vain kääntää jokainen bitti (0- > 1, 1- > 0). Näyttää siltä, että molemmat tekevät minulle saman asian. Sitten voit edustaa sitä nimellä " Käänteinen bittisuuntainen viimeinen tavu viestin kaikkien tavujen summasta "
  • Kyllä, olet oikeassa, mutta XOR käyttää vain yhtä käskyä kaikkien 8 bitin kääntämiseen. En voi ' ajatella tehokkaampaa menetelmää. Voitko?
  • Jostain syystä se ei toimi minulle. Täällä minulla on CA 00 01 70 00, lisätään ne yhteen saadaksesi 13B, otan viimeisen tavun, joka on 3B ja XOR FF: n kanssa, sitten saan c4, joka eroaa 8E: stä (esimerkki sain käsikirjasta). Kaipaanko jotain säännöstä?
  • @transistor: Kiitos selvityksestäsi. No, en tiedä ohjelmointikieltä ', se on järkevämpää minulle. Tiedän perlissä ' vain ~ muuttujan. Luulen käytännössä, että se ' ei tee eroa kumpaankaan suuntaan

Vastaa

Vaadittu tarkistus summa lasketaan tiedoista näin:

kirjoita kuvan kuvaus tähän

Sinä et sisällytä etumerkki 0xCA tarkistus summaan, vain varjostettu tavua.

Yksinkertainen bitti C-koodista esimerkin laskemiseen:

int main() { int i; unsigned char cs; unsigned char a[] = {0x00, 0x01, 0x70, 0x00}; cs=0; for (i=0; i< sizeof(a); i++) { cs += a[i]; } cs ^=0xFF; printf("cs = %X \n", cs); return 0; } 

Ja tulos on odotettua:

sh-4.3$ gcc -o main *.c sh-4.3$ main cs = 8E 

Koska ilmoitin muuttujan cs allekirjoittamattomana merkkinä, se heittää ylemmät bitit jokaisen lisäyksen yhteydessä. Lisääminen on sama kuin muut esimerkit, voit heittää ylemmät bitit loppuun, jos teet sen manuaalisesti. Ole vain varovainen näissä tapauksissa tarkalleen, mikä on ja mitä ei sisälly tarkistussummaan.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *