Thread pack, unpack, einpack ...: Böhmische Wälder ... (1 answers)
Opened by eisbeer at 2004-08-28 04:18

eisbeer
 2004-08-28 04:18
#49681 #49681
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ufffff, ich bin jetzt echt am Ende, das hab ich noch nie gemacht
und ich hoff das ich es nie wieder machen werden muss:

Ich habe folgende Funktion, die mir einen Textstring in PDU-UD
(für GSM-Handys verstänliches SMS-Format) konvertiert.
Dabei ist es sehr wichtig, dass der gsm0338-Zeichensatz
berücksichtigt wird, weil sonst Sonderzeichen sehr kryptisch
rauskommen.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# weiter oben steht noch use Encode;
sub encode_7bit {
my ($msg) = $_[0];
my ($bits, $ud, $octet);

foreach (split(//,$msg)) {
my $b = encode("gsm0338", $_);
$b = unpack('b7', $b);
$bits .= $b;
}
while (defined($bits) && (length($bits)>0)) {
$octet = substr($bits."0" x 7,0,8);
$ud .= unpack("H2", pack("b8", substr($octet, 0, 8)));
$bits = (length($bits)>8)?substr($bits,8):"";
}
return uc $ud;
}

Funktioniert prima, Ausgabe ist folgende:
Code: (dl )
1
2
&encode_7bit("Hällö wie gühtß?");
> C83D9BCD07DDD365D0D98FA67B7E


Jetzt fehlt mir aber die Funktion &decode_7bit;
Das ganze baut auf GSM::SMS::PDU auf, bzw. es soll eine
Verbesserung ebendiesem sein. Und deshalb steht da auch
schon eine gleichnamige Funktion drin, und zwar diese:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub decode_7bit {
my ($ud, $len) = @_;
my ($msg,$bits);
my $cnt=0;
$ud = $ud || "";
$len = $len || 0;
$msg = "";
my $byte = unpack('b8', pack('H2', substr($ud, 0, 2)));
while (($cnt<length($ud)) && (length($msg)<$len)) {
my $c = pack('b7', substr($byte,0,8));
$msg.= $c;
$byte = substr($byte,7,length($byte)-7);
if ( (length( $byte ) < 7) ) {
$cnt+=2;
$byte = $byte.unpack('b8', pack('H2', substr($ud, $cnt, 2)));
}
}
return $msg;
}

Ausgabe hier:
Code: (dl )
1
2
3
# die Laenge 16 ist die Laenge des Strings durch 2
&decode_7bit("C83D9BCD07DDD365D0D98FA67B7E",16);
> H{ll| wie g~ht&â–²?


Und das liegt daran das die einzelnen chars nichtmehr rück-
konvertiert werden und ich bekomm es nicht hin. Entweder
bin ich zu blöd oder mein Kopf ist mittlerweile so blockiert...

Also ich suche eine Umkehrfunktion für encode_7bit.

Ein paar informationen zum Format:
- http://search.cpan.org/~johanvdb/GSM-SMS-0.162/lib/GSM/SMS/PDU.pm Das Modul
- http://www.dreamfabric.com/sms/default_alphabet.html
- http://www.dreamfabric.com/sms/
- http://home.student.utwente.nl/s.p.ekk....du.html

Hilfe wäre sehr willkommen weil ich einfach zu wenig
Ahnung von dem Packzeug hab...

Claudius Jehle
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...

View full thread pack, unpack, einpack ...: Böhmische Wälder ...