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.
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:
&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:
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:
# 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...