Hi Jürgen...habs mal neu strukturiert ist wohl beim Einfügen verlorengegangen
Code:
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
Code:
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.
Code:
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.
Code:
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.
Code:
00101011.01001111.00111001.01110010.111...
Die neu gruppierten Bytes werden nun wieder gespiegelt und stehen uns in alt bekannter Schreibweise zur verfügung.
Code:
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?!
Lesezeichen