PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 8bit -> 7bit Zeichen Codierung für PDU Modus für Handys



Blackice2999
19.11.2004, 14: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

21.11.2004, 11:46
Hat denn hier noch keiner so etwas gemacht?

Gruß Dennis

JSt
26.11.2004, 12:05
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;
}

FoCus
08.12.2004, 21:22
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?!