Archiv verlassen und diese Seite im Standarddesign anzeigen : 8bit -> 7bit Zeichen Codierung für PDU Modus für Handys
Blackice2999
19.11.2004, 15:09
Hi @all,
habe jetzt bestimmt mir schon zich Codes angeschaut und auch bestimmt einige erklärungen... nur ich raff es einfach nicht.
Wie ich an ein Handy per Uart die Daten für das SMSC & Empfänger einstelle habe ich bereits hinbekommen. 8bit Zeichen -> 4bit BCD gepackt und dann als Hex an das Handy ok. Aber wie wandel ich jetzt ein Zeichen meinetwegen 'H' was ja als 1 byte mit 8 bit vorliegt in 7bit ?!
Gruß Dennis
P.S.: Es geht von der sache her um folgendes: http://www.nobbi.com/sms_pdu.htm
Hat denn hier noch keiner so etwas gemacht?
Gruß Dennis
Hi,
ich hoffe das hilft Dir weiter.
Gruß
Jürgen
size_t UChar2Hex7String(
const unsigned char *source,
size_t sourceLen,
char *dest
)
{
dest[0] = '\0';
char *p = dest;
for (size_t i = 0; i < sourceLen; i += 8 )
{
unsigned char tmpbuffer[10];
memset(tmpbuffer, 0, sizeof tmpbuffer);
unsigned char mask = 0;
for (size_t j = 0; j < 8 && i + j < sourceLen; j++)
{
unsigned char ch = source[i + j];
ch >>= j;
tmpbuffer[j] = ch;
if (j > 0)
{
ch = source[i + j];
ch &= mask;
ch <<= 8 - j;
tmpbuffer[j - 1] |= ch;
}
mask = (mask << 1) | 1;
}
for (j = 0; j < 7 && i + j < sourceLen; j++)
{
sprintf(p,"%02x", tmpbuffer[j]);
p += 2;
}
}
return p - dest;
}
Hi Jürgen...habs mal neu strukturiert ist wohl beim Einfügen verlorengegangen
size_t UChar2Hex7String( const unsigned char *source, size_t sourceLen, char *dest) {
dest[0] = '\0';
char *p = dest;
for (size_t i = 0; i < sourceLen; i += 8 ) {
unsigned char tmpbuffer[10];
memset(tmpbuffer, 0, sizeof tmpbuffer);
unsigned char mask = 0;
for (size_t j = 0; j < 8 && i + j < sourceLen; j++) {
unsigned char ch = source[i + j];
ch >>= j;
tmpbuffer[j] = ch;
if (j > 0) {
ch = source[i + j];
ch &= mask;
ch <<= 8 - j;
tmpbuffer[j - 1] |= ch;
}
mask = (mask << 1) | 1;
}
for (j = 0; j < 7 && i + j < sourceLen; j++) {
sprintf(p,"%02x", tmpbuffer[j]);
p += 2;
}
}
return(p - dest);
}
Hier gibt es zu der Umwandlung ein Beispiel:
http://www.dreamfabric.com/sms/hello.html
habe mich gerade man ein bisschen in das Thema eingearbeitet...
Message: Testtext
Ascii Hex Bin
T 54 01010100
e 65 01100101
s 73 01110011
t 74 01110100
t 74 01110100
usw..
Man beachte, dass sich die verwendeten Asciizeichen alle in einem Raum befinden, der eine führende Null hat. Diese lässt man genauso wie in der Dezimalrechnung einfach weg.
Ascii Hex Bin
T 54 1010100
e 65 1100101
s 73 1110011
t 74 1110100
t 74 1110100
usw..
Jetzt spiegeln wir die einzelnen Bytes.
Ascii Hex GespiegeltBin
T 54 0010101
e 65 1010011
s 73 1100111
t 74 0010111
t 74 0010111
usw..
hängen es hintereinander und gruppieren byteweise neu.
00101011.01001111.00111001.01110010.111...
Die neu gruppierten Bytes werden nun wieder gespiegelt und stehen uns in alt bekannter Schreibweise zur verfügung.
GespiegeltBin Hex
11010100 D4
11110010 F2
10011100 9C
01001110 4E
Als Beispieltext habe ich mal den von Nobbi hergenommen. (http://www.nobbi.com/sms_pdu.htm)
Gruss
Michael
Jetzt hats doch glatt bei mir die Formatierung auch verrissen?!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.