Thread PHP script in perl umsetzen (10 answers)
Opened by thoweiss at 2007-03-22 14:10

thoweiss
 2007-03-23 08:37
#75251 #75251
User since
2007-03-22
6 Artikel
BenutzerIn
[default_avatar]
Jetzt habe ich ein neues Problem...
Die CRC-Berechnung funktioniert zwar, aber ich habe jetzt ein problem meine datem im richtigen format zu wandeln.

Das CRC-script erwartet ja so etwas:

$strToSend = "\xfe\x04\x01"

Ich bekomme von meinem interface dieses:
my $hexdata = "fe0401";

Ich habe die daten mit folgendem script versucht zu wandeln:

Ausgabe auf der kommandozeile:

misterhouse:/home/misterhouse/misterhouse-2.102/bin# perl unpack.pl
\xfe\x04\x01\x00\x00 Das ist das ergebnis der Umwandlung
Checksum A: c906 Die checksumme meiner daten
þ Das ist Print $strToSend
Checksum 1: bed2 Und die korrekte checksumme...


warum ist mein \xfe\x04\x01\x00\x00 nicht identisch mit
(Die beiden null bytes habe ich hier vorher angehängt und den sub aufruf entsprechend angepasst)


$strToSend = "\xfe\x04\x01";
Das sind doch beides strings, oder?

Interpretiert perl $strToSend = "\xfe\x04\x01"; als hex-daten??

Wie wandel ich meine \xfe\x04\x01 in \xfe\x04\x01???


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/perl

use strict;
use warnings;

my $hexdata = "fe0401";

my @split = unpack( "A2" x (length($hexdata)/2), $hexdata );

my $strToSend = ("\\x". join ("\\x",@split)."\\x00\\x00");

print $strToSend,"\n";
my $CRC16 = GetCRC16($strToSend); # ergibt "BED2"
print "Checksum A: ". sprintf("%x", $CRC16). "\n";


$strToSend = "\xfe\x04\x01";
print $strToSend,"\n";

$CRC16 = GetCRC16($strToSend. "\x00\x00"); # ergibt "BED2"
print "Checksum 1: ". sprintf("%x", $CRC16). "\n";

sub GetCRC16 {
my $s = shift;

my $CRCreg = 0xffff00;

for (my $cp=0; $cp<length($s); $cp++) {
$CRCreg |= ord( substr($s,$cp,1) );

for (my $bp=0; $bp<8; $bp++) {
$CRCreg <<= 1;
if ($CRCreg & 0x1000000) {
$CRCreg ^= 0x100200; # hier ist das Polynom 0x1002 enthalten
}
$CRCreg &= 0xffffff;
}
}
return $CRCreg >> 8;
}

1;
:(

View full thread PHP script in perl umsetzen