So langsam werde ich wuschig!!
wenn ich meine bytes als array übergebe, mit pack in binäre daten verwandle und dann an die CRC routine übergebe, dann geht es!!
Aber wie zum geier wandel ich einen String "fe0401" in ein hex-array mit den werten my @bytes = (0xFE, 0x04, 0x01); ??
Vermutlich ist es so einfach, aber ich sehe es im moment nicht...
Ich mach jetzt erstmal pause....
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
#!/bin/perl
use strict;
use warnings;
my @bytes = (0xFE, 0x04, 0x01); #command for get software version from HS485PCI
my $cmd = pack("C*", @bytes);
print $cmd,"\n";
my $CRC16 = GetCRC16($cmd. "\x00\x00"); # ergibt "BED2"
print "Checksum A: ". sprintf("%x", $CRC16). "\n";
my $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;
\n\n
<!--EDIT|thoweiss|1174664806-->