Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6540[/thread]

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



<< >> 2 Einträge, 1 Seite
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...
eisbeer
 2004-08-28 15:42
#49682 #49682
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Naja habs einigermaßen hinbekommen, kann man schliessen...
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
<< >> 2 Einträge, 1 Seite



View all threads created 2004-08-28 04:18.