Gå til innhold

Hjelp til å forstå utregning i Perl-script.


Anbefalte innlegg

Skrevet

Heisann.. Noen som kan hjelpe meg med å forstå hvordan selve utregningen i dette Perl-scriptet foregår?

 

sub toled {
my $page = shift;
my $str = shift;

# calculate checksum
my $checksum = 0x74;
for (0..length($str)-1) {
	my $c = ord(substr($str,$_));
	$checksum = $checksum ^ $c;
}
# construct basic "display this on page $page" message
my $ledcode = sprintf("<ID00><L1><P%s><FE><MA><WC><FE>%s%02X<E>",
					  uc($page), $str, $checksum);
# send to serial device /dev/ttyS0
open SERIAL, ">/dev/ttyS0";
print SERIAL $ledcode;
close SERIAL;
}

 

For eksempel har man kommet frem til at denne selve teksten i denne linjen her har generert checksumen 4B.

 

<ID00><L1><PA><FE><MA><WC><FE>Text message entered4B<E>

Videoannonse
Annonse
Skrevet
Heisann.. Noen som kan hjelpe meg med å forstå hvordan selve utregningen i dette Perl-scriptet foregår?

 

sub toled {
my $page = shift;
my $str = shift;

# calculate checksum
my $checksum = 0x74;
for (0..length($str)-1) {
	my $c = ord(substr($str,$_));
	$checksum = $checksum ^ $c;
}
# construct basic "display this on page $page" message
my $ledcode = sprintf("<ID00><L1><P%s><FE><MA><WC><FE>%s%02X<E>",
					  uc($page), $str, $checksum);
# send to serial device /dev/ttyS0
open SERIAL, ">/dev/ttyS0";
print SERIAL $ledcode;
close SERIAL;
}

 

For eksempel har man kommet frem til at denne selve teksten i denne linjen her har generert checksumen 4B.

 

<ID00><L1><PA><FE><MA><WC><FE>Text message entered4B<E>

 

det loopes over hvert tegn i inputstring og gjøres en xor på ascii verdi til hver av disse mot "checksum", en tallverderdi som endres underveis.

 

Om første bokstav var a (som er ascii verdi 97 (fra ord() funksjon)), får vi:

	#0x74 (hex): 1110100 (bin)
#97(dec)   : 1100001 (bin)
#-------------------------
#0x74^97   : 0010101 (bin) (dvs 21 dec, som benyttes som $checksum mot neste tegn)

  • 3 uker senere...
Skrevet (endret)

interessant at noen faktisk trenger hjelp til akkurat det samme som meg.

 

 

en ting jeg lurer på, er om den begynner på slutten av stringen, siden step = -1 i koden.

 

jeg holder på å prøve å gjenskape denne i visual basic, som et systray program som skal kjøre hele tiden.

 

er det noen som er villige til å hjelpe littegran med dette?

Endret av mobents
Skrevet
en ting jeg lurer på, er om den begynner på slutten av stringen, siden step = -1 i koden.

 

Uhmnai, step er ikke -1. Hvis du ser litt nærmere etter står det 'for (0..length($str)-1)', altså: fra null til lengden på strengen minus 1 (siden vi begynner å telle på 0 i stedet for 1). Step er ikke angitt eksplisitt---jevnfør 'for each (@array)', hvor den stepper seg gjennom en liste. Samme greia her, bare at lista er gitt ved (0..n).

 

jeg holder på å prøve å gjenskape denne i visual basic, som et systray program som skal kjøre hele tiden.

 

ouch :\

  • 4 uker senere...
Skrevet
jeg holder på å prøve å gjenskape denne i visual basic, som et systray program som skal kjøre hele tiden.

 

er det noen som er villige til å hjelpe littegran med dette?

 

Hvordan gikk det med prosjektet? Fikk du gjennomført det? Isåfall hadde det vært flott om du hadde delt det med meg... Jeg har et PHP-script som gjør utregningene, men hadde vært greit å gjort det i selve programmet..

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...