Die PIN wird dabei hexadezimal kodiert und umgekehrt übertragen (little endian). Beispiel: die PIN 123456 ist hexadezimal 0x1e240. Als little endian (umgekehrte Übertragung) und mit Nullen auf 4 Byte aufgefüllt ergibt sich: 0x40e20100.
$dec = 123456;
$hex = sprintf('%2x',$dec);
$hex 1e240
Aber wie komme ich nun zu meinem little endian aufgefüllt auf 4 Byte länge 40e20100.
Die 4 Byte bekomme ich hin, aber das little endian leider nicht.
Kann mir bitte jemand einen Anstoß geben?
zum beispiel so:use strict;
use warnings;
my $pin = 123456;
my ($hex) = unpack( 'V', pack( 'N', $pin ) );
$hex = sprintf('%2x',$hex);
print "$hex\n";
also erst endian drehen und dann hex draus machen.
gruss
andre
Also auf die Idee wäre ich jetzt nicht gekommen, weil da ja stand aus dem Hex ein LittleBigPlanet Endian machen. Oh man, vielen Dank Andre, ich schaue es mir heute Abend mal an. Hab ich Mal wieder zu verquer gedacht.
andre hat die Loesung geliefert, der Anstoss waere "perldoc -f pack"
Vielen Dank ihr beide, habe es getestet und läuft.
Die pack unpack Lösung hatte ich auch gefunden, hab nur den Fehler gemacht die Reihenfolge anders zu machen.
Nun kann ich auch eine Pin an den BT Thermostaten senden.
Grüße und Euch ein entspanntes Wochenende.