Toon posts:

SMS string omzetten naar plain text

Pagina: 1
Acties:
  • 231 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Beste mede tweakers

Ik ben bezig met het lezen van sms berichten uit een mobiel.
Nou gebruik ik een Nokia6210 als test telefoon.
Via een datakabel op een rs232 poort haal ik met behulp van
AT commando's de berichten eruit.
Alleen de berichten krijg ik in een niet leesbaar formaat eruit.
Voorbeeldje:

+CMGR: 1,,94
07911326060032F0040ED04F592BC82ECBE939002090415170550054C5563B9C6
68BCBF2F4184D07BDDD747B43610DBB752091F4DD5E9741F6B01B442ECB41D672
D92D02F1E4EFF6BA0C90BFDBEBB2CBCDF635144F37B92CBF97E5701D081D66B3D
F0D454301

OK
AT+CMGR=1


Dit is een sms bericht met alle gegevens erin zoals Tijd,Gsm nr,nr smsserver, bericht enz...


Nou kan ik er alleen niet achter komen hoe ik dit bericht kan converteren naar plain text.

Weet iemand misschien hoe ik dit kan converteren naar plain text?
Of kan iemand mij wat op weg helpen?

Verwijderd

misschien heb je hier wat aan:

http://www.btinternet.com/~mrbush/appdev.htm

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Het lijkt op hexadecimaal.. Probeer eens te kijken wat je krijgt waneer je hier gewoon letters van maakt (dat het gewoon 16 bit ascii tekens zijn). Ik heb zo snel zelf hier niet iets waarmee ik het kan converteren, anders had ik het wel even gedaan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Xavier
  • Registratie: November 2000
  • Niet online
Verwijderd schreef op 15 september 2002 @ 22:36:
Beste mede tweakers

Ik ben bezig met het lezen van sms berichten uit een mobiel.
Nou gebruik ik een Nokia6210 als test telefoon.
Via een datakabel op een rs232 poort haal ik met behulp van
AT commando's de berichten eruit.
Alleen de berichten krijg ik in een niet leesbaar formaat eruit.
Voorbeeldje:

+CMGR: 1,,94
07911326060032F0040ED04F592BC82ECBE939002090415170550054C5563B9C6
68BCBF2F4184D07BDDD747B43610DBB752091F4DD5E9741F6B01B442ECB41D672
D92D02F1E4EFF6BA0C90BFDBEBB2CBCDF635144F37B92CBF97E5701D081D66B3D
F0D454301

OK
AT+CMGR=1


Dit is een sms bericht met alle gegevens erin zoals Tijd,Gsm nr,nr smsserver, bericht enz...


Nou kan ik er alleen niet achter komen hoe ik dit bericht kan converteren naar plain text.

Weet iemand misschien hoe ik dit kan converteren naar plain text?
Of kan iemand mij wat op weg helpen?
Janoz schreef op 15 september 2002 @ 23:12:
Het lijkt op hexadecimaal.. Probeer eens te kijken wat je krijgt waneer je hier gewoon letters van maakt (dat het gewoon 16 bit ascii tekens zijn). Ik heb zo snel zelf hier niet iets waarmee ik het kan converteren, anders had ik het wel even gedaan.
Windows Rekenmachine en dan wetenschappelijke doen.
Daar kan het wel in.
Maarja veel succes. Want hij pakt niet in 1 keer de hele regel.

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 08:40
Het is 7bit ascii gecodeerd in 8bit hex en het is behoorlijk puzzelen eerdat je het goed om kunt zetten... PDU heet dit. hier een stukje code via google.
Succes!

Verwijderd

Topicstarter
ik had alwat geprobeerd om de Hex waarden om te zetten naar binair 8-bit en dan naar 7-bit -> Ascii.
Maar dat was jammer genoeg niet de oplossing..

Ik heb ook een bericht ontleed

4 D4 F2 9C 0E = TEST
3 D4 F2 1C = TES
2 D4 32 = Te
1 54 = T
1 74 = t

Bij de onderste 2, dus als er alleen maar een t in het bericht staat.
Komt het overeen met de hex waarde.

bij de anderen niet....


Iemand nu een idee hoe dit valt te converteren?
Die link hierboven lijkt interessant, bekijk ik morgen ff
Nu me bed in

Verwijderd

Topicstarter
Me bed moest nog ff wachten
Deze link vondt ik....
http://www.dreamfabric.com/sms/
http://www.dreamfabric.com/sms/hello.html
volgens mij is dat oplossing :D

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

volgens mijn converter komt daaruit: [ZCSYEKeSGQiA^]im←¶,C]u@D$_[WKAlC]AHKeA,KK]E@xd_[WK☺d_[WK]\Y}→¶▲]IKeoKeau@PCYY_←¶→¶

mijn converter is volgens mij goed, want hij werkt ook met het voorbeeld van de site die je net gaf, dus heb je m wel goed gekoppiepeest? :)

hier is de code (in C++)
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int tohex (const char * str)
{
    return (((str[0] > '9') ? str[0] - 'A' + 10 : str[0] - '0') << 4) |
        ((str[1] > '9') ? str[1] - 'A' + 10: str[1] - '0');
}

void translate (const char * str)
{
    using namespace std;

    str += 2 * (tohex (str) + 20);
    int len = strlen (str);

    int bits = 7;
    int rest = 0;

    for (int i = 0; i < len; i += 2)
    {
        int num = tohex (str + i);
        int c = ((num & ((1 << bits) - 1)) << (7 - bits)) | rest;
        cout << (char)c;

        rest = (num & ~((1 << bits) - 1)) >> bits;
        if (--bits < 0)
        {
            bits = 7;
            rest = 0;
            i -= 2;
        }
    }
}


Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
het kan wel kloppen dat je dat als uitvoer kreeg.
Je moet niet de hele string laten converteren maar alleen het laatste gedeelte..

Ik weet het punt nog niet precies te vinden..
zo ff uitzoeken

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

duh:
C++:
1
str += 2 * (tohex (str) + 20);


ik pak dus alleen het laatste gedeelte (en bij het voorbeeld van de site die je gaf gebruikte ik ook de volledige string, niet alleen dat "hellohello" gedeelte) ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Wat ik weet is dat je een e-mail hebt gehad van Romke van der Veen (en dat O2 je er van op de hoogte stelde) ;)

  • El_BingO
  • Registratie: Juli 2001
  • Laatst online: 26-08 12:01
Hier een source code
Ik hoop dat je er wat mee kunt.

  • Zonique
  • Registratie: Maart 2002
  • Laatst online: 20-08 22:23
De string die je daar ziet is een string die is opgemaakt in het PDU formaat. Da's een formaat specifiek voor telefoons. Helaas is dit formaat een beetje lastig te ontleden. (klik maar eens op de link uit de reply hierboven)

Je kan het ook simpeler oplossen door even een ander AT commando te geven:
AT+CMGF=1

Als je een OK terugkrijgt betekent dat dat je telefoon vanaf het volgende AT commando om SMS uit te lezen gewoon leesbare strings teruggeeft. Lijkt me een hoop makkelijker voor eerst. Doe je later gewoon die PDU decoding nog eens.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Nokia SDK . . kan heel handig zijn
http://www.forum.nokia.co...9,,00.html?fsrParam=2%2D0

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Ten eerste : SMS kun je niet naar ASCII vertalen, want de euro is wel een valide SMS karakter, maar geen valide ASCII. Sterker nog, de SMS karakterset is niet te vertalen naar een ISO-8859-x karakterset, voor 0<x<16. Dus je moet de code naar UTF-8/UTF-16/Unicode vertalen (=>wchar_t).

Ten tweede is het SMS alfabet een multi-septet encoding; een euroteken is 2*7=14 bits. Deze bits staan achter elkaar gepakt in 8 bits units. Deze moet je dus met 7/8 bitshifts uit elkaar halen (zie .oisyn's code).

Ten derde moet je ook nog weten waar het SMS bericht in de output staat; dat staat idd in de Nokia SDK.

* MSalters heeft dankzij deze onzin een paar duizend SMSjes verstuurd waarin karakters waren weggevallen

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Hier staat nog een Delphi procedure tussen: http://www.weethet.nl/dutch/prg_delphi_hansiestools.asp

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{==============================================================================}
{ FUNCTION  :  RESULTSTRING = DecodeSMS7Bit (PDUSTRING)                        }
{==============================================================================}
{ PURPOSE   : this function decodes an 7-bit SMS (GSM 03.38) to ASCII          }
{==============================================================================}
{ PRECONDITION : PDUSTRING contains a clean (no headers!!) TP-PDU message      }
{ POSTCONDITION: RESULTSTRING is the TP-PDU message in plain ASCII             }
{==============================================================================}
function DecodeSMS7Bit(PDU : string):string;
var OctetStr : string;
    OctetBin : string;
    Charbin  : string;
    PrevOctet: string;
    Counter  : integer;
    Counter2 : integer;
begin
  PrevOctet:='';
  Result:='';

  for Counter:=1 to length(PDU) do
    begin
      if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous }
        begin
          if BinStrToInt(PrevOctet)<>0 then
            Result:=Result+Chr(BinStrToInt(PrevOctet))
          else Result:=Result+' ';

          PrevOctet:='';
        end;

      if Odd(Counter) then            { only take two nibbles at a time }
        begin
          OctetStr:=Copy(PDU,Counter,2);
          OctetBin:=HexToBin(OctetStr);

          Charbin:='';
          for Counter2:=1 to length(PrevOctet) do
            Charbin:=Charbin+PrevOctet[Counter2];

          for Counter2:=1 to 7-length(PrevOctet) do
            Charbin:=OctetBin[8-Counter2+1]+Charbin;

          if BinStrToInt(Charbin)<>0 then Result:=Result+Chr(BinStrToInt(CharBin))
            else Result:=Result+' ';

          PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1);
        end;
    end;
end;

"The shell stopped unexpectedly and Explorer.exe was restarted."

Pagina: 1