Wie kann ich eine 8 Bit Checksumme erzeugen ?

Bild von wollik

Hallo ins Forum,
ich habe folgende Frage an Euch:
Für einen ASCII-String, muss ich eine Checksumme nach folgender Vorgabe erzeugen:

"Für die Prüfsumme werden die ASCII-Werte der Zeichen von „*“ einer Zeile bis einschließlich Leerzeichen nach dem Ertrag aufaddiert und als ASCII-Wert mit ausgegeben. Zur Berechnung der Prüfsumme wird für Addition und Anzeige nur 1 Byte verwendet und somit die Überläufe mit verwendet."

Hier mein bisheriger Code:
 
#!perl
$| = 1;
use strict;

### Der String: "*010 3 476.8 9.84 4691 240.4 16.48 3973 50 3937 " ### soll: "æ" erzeuen
my $asc_string = "*010   3 476.8  9.84  4691 240.4 16.48  3973  50   3937 ";

my @asc_array  = split (//, $asc_string);
my $checksum   = unpack("%8C*", $asc_string);
my $ascii_val  = chr($checksum);

print "\nFolgender ASCII String hat $#asc_array Zeichen.\n\n";
print "--->$asc_string<---\n\n";
print "Errechnete Checksumme: ->$checksum<- \tASCII Wert:  ->$ascii_val<-\n";

$checksum   = "145";
$ascii_val  = chr($checksum);
print "Geforderte Checksumme: ->$checksum<- \tASCII Wert:  ->$ascii_val<-\n\n";

--- und erzeugt diesen Output:

Folgender ASCII String hat 55 Zeichen.

--->*010   3 476.8  9.84  4691 240.4 16.48  3973  50   3937 <---

Errechnete Checksumme: ->230<-  ASCII Wert:  ->µ<-
Geforderte Checksumme: ->145<-  ASCII Wert:  ->æ<-
 
--- Hat jemand eine Idee warum ich 230 anstelle von 145 errechne ?

Viele Dank für Eure Unterstützung
WolliK


Trackback URL für diesen Beitrag:

http://community.perl.de/trackback/80
0
Eigene Bewertung: Keine

crosspost

Crosspost: http://www.perl-community.de/bat/poard/thread/16455

perl-community.de - das forum mit wiki, scripts und grosser FAQ

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer