Thread Hex to signed Integer (1/256) (9 answers)
Opened by JuMi2006 at 2012-09-17 11:15

JuMi2006
 2012-09-17 11:15
#161855 #161855
User since
2012-09-17
8 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich möchte für ein bestimmtes Protokoll Daten decodieren und encodieren. Die Daten kommen als HEX über die serielle Schnittstelle und beinhalten dann Werte die nach Angaben des Protokolls decodiert werden müssen.
Die Decodierung habe ich aus einem anderen Perl Script schon übernommen, schaffe es aber nicht das ganze dann wieder zu encodieren.

Eingabewert sind 2Bytes ($lb,$hb) und Ausgabe dann $y. Anscheinend sind lowbyte und highbyte hier vertauscht.

Die Doku sagt:

$lb $hb -> $y

00 00 -> 0
00 01 -> 1/256
FF FF -> -1/256
FF 00 -> -1 (Tippfehler beseitigt, vorher falsch: fff0)
80 00 -> -128
80 01 -> -127,996
7F FF -> 127,996

Kennt jemand diese Datentypen und einen Weg fürs encoding ?
Mir fehlen da wirklich die Informatik-Basics.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub decode_d2b {
my $lb = $_[1];
my $hb = $_[0];
my $z = hex($hb)*256 + hex($lb);
if (($z & 0x8000) == 0x8000) {
my $y = -((~hex($hb) & 255) + ((~hex($lb) & 255) + 1)/256);
return $y;
}
else {
my $y = hex($hb) + ((hex($lb))/256);
return $y;
}
return;
}


Das ganze geht doch bestimmt auch mit einem Einzeiler hin und zurück oder ?

Vielen Dank und Gruß
JuMi2006
Last edited: 2012-09-17 22:12:56 +0200 (CEST)

View full thread Hex to signed Integer (1/256)