Salut à tous, j'ai récemment poster du code pour convertir du texte en PDU.
Actuellement je suis bloqué dans mon développement pour faire l'inverse.
Je reçois un code PDU en Héxadécimal et je dois le convertir en texte.
Pour ceux qui ne savent pas le PDU est la méthode d'encodage d'un sms.
Sur ce site vous trouverez les informations nécessaires si besoin
http://www.dreamfabric.com/sms/hello.html
http://www.dreamfabric.com/sms/
En principe rien qu'avec le premier lien vous devriez comprendre facilement.
Mon problème est que je ne trouve pas de personne qui ont posté les différentes étapes sur le net. Je m'explique..
Dans ce cas ci on envoie "hellohello" (10 caractères)
on a le code en héxadécimal (http://twit88.com/home/utility/sms-pdu-encode-decode ce site permet de convertir pour faire des tests)
Mais dans le cas ou j'aimerai envoyé : Il fait beau dehors
Je ne retrouve nul part d'autres syntaxes détaillées comme le "hellohello".. Ce qui m'empêche de comprendre les modifications à faire après récursivité des traitements..
Je vous poste mon code actuel.. Je sais lire jusque 17 caractères.. Passer ce délai mon conversion de la base 7 à la base 2 me renvoie apparemment pas la bonne solution.
La difficulté est qu'on lit par 8 bits mais qu'on doit traiter et réécrire en 7 bits.
Le code pour passer de l'héxa à la base 7 n'est pas mis car il n'est pas nécessaire c'est une simple conversion..
Le code pour passer de la base 7 (8 octets) à la base 2 (7 octets)
Procédure lecture8bit()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 sChai1, sChai2, sChai3,sChaine sont des chaînes i, nDim1, k, j, m est un entier = 0 nMod,nMod7,nCompteur est un entier nDim1 = (Taille(SAI_B7)/7) nCompteur = (Taille(SAI_B7)/8) // Dans le cas d'un seul caractère il faut quand même faire le travail ! SI nDim1 = 0 ALORS nDim1 = 1 FIN SI nCompteur = 0 ALORS nCompteur =1 FIN tab1 est un tableau de nDim1 chaînes tab2 est un tableau de nDim1 chaînes //i démarre à zéro donc pas besoin de faire nCompteur +1 POUR i = 0 _A_ nCompteur // On remet à 1 le m ici.. Dans l'autre sens on le mettait à zéro !! nMod = modulo(m,8) SI nMod = 0 ET i <> 0 ALORS m = 1 FIN sChai1= Lecture8Bit(i) sChai2 = TruncD(sChai1,m) // Dans le cas ou on est sur le 8ème caractère et que ce n'est pas le dernier à traiter ! SI m = 7 ET i <> nCompteur ALORS sChai2 = TruncD(sChai1,0) sChai3 = TruncG(sChai1,1) // En temps normal SINON SI i <> nCompteur sChai3 = TruncG(sChai1,m+1) SINON // Si on tombe sur le 8ème caractère en dernier !! traitement spécial !!! nMod = modulo(i,7) SI nMod = 0 ALORS sChai2 = TruncD(sChai1,0) FIN FIN SI i < nCompteur +1 ALORS j++ tab2[j] = sChai2 FIN k++ SI k < nCompteur+2 ALORS tab1[k] = sChai3 FIN m++ FIN // i =1 donc nCompteur +1 !!! POUR i = 1 _A_ nCompteur+1 nMod = modulo(i,8) nMod7 = modulo(i+1,8) SI i <> 7 ET nMod7 = 0 ALORS sChaine += tab1[i-1] + tab2[i] SINON SI nMod <> 0 ALORS sChaine += tab2[i] SI i <> 1 ALORS sChai1 = tab1[i-1] sChaine += tab1[i-1] FIN SINON SI i <> 1 sChaine += tab1[i-1] + tab2[i] FIN FIN SAI_Binaire = sChaine
Procédure TruncD()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 PROCEDURE Lecture8Bit(ind) sLChaine est une chaîne = SAI_B7 sResul est une chaîne ANSI sResul = Milieu(sLChaine, (ind*8 + 1), 8) RENVOYER sResul
Procédure TruncG()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 PROCEDURE TruncD(dChaine,ind) sMResult est une chaîne ANSI sMResult = Droite(dChaine,7-ind) RENVOYER sMResult
Voila j'espère avoir été le plus clair possible
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 PROCEDURE TruncG(mChaine,ind) sDResult est une chaîne ANSI sDResult = Gauche(mChaine,ind) RENVOYER sDResult
J'attend vos retours avec impatience..
Si ça peut vous être utile :
phrase : "howareyou" (9caractères)
Hexa : E8F73D2C2FE7DF75
B7 : 111010001111011100111101001011000010111111100111110111111110101
B2 : 110100011011111110111110000111100101100101111100111011111110101
phrase : "salut ca va ca va" (17 caractères)
Hexa : F330BB4E078DC3207B18340E83EC61
B7 : 11110011001100001011101101001110000001111000110111000011001000000111101100011000001101000000111010000011111011001100001
B2 : 11100111100001110110011101011110100010000011000111100001010000011101101100001010000011000111100001010000011101101100001
Les phrases la sont complètes et peuvent vous être utile durant vos tests..
Partager