programa para pasar de septetos a octetos en tramas PDU

Dependencies:   mbed

Committer:
tony63
Date:
Fri Apr 28 04:27:07 2017 +0000
Revision:
1:b0989e540fff
Parent:
0:0d2c03fdec12
funci?n aislada probada OK

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tony63 0:0d2c03fdec12 1 #include "mbed.h"
tony63 0:0d2c03fdec12 2 Serial pc(USBTX, USBRX); // tx, rx
tony63 0:0d2c03fdec12 3 /*
tony63 0:0d2c03fdec12 4 ALGORITMO PARA PASAR DE SEPTETOS A OCTETOS
tony63 0:0d2c03fdec12 5 EN UNA MENSAJE DE TEXTO DE CELULAR EN FORMATO PDU
tony63 0:0d2c03fdec12 6 USA DOS CADENAS UNA DE ENTRADA Y OTRA DE SALIDA
tony63 0:0d2c03fdec12 7 LENIN ES LA LONGITUD DE ENTRADA
tony63 0:0d2c03fdec12 8 LENOUT LA LONGITUD DE SALIDA
tony63 0:0d2c03fdec12 9 SE USA PARA ENSAMBLAR UNA TRAMA PDU
tony63 0:0d2c03fdec12 10 ESTA CADENA DE SALIDA SE ENVIA SOBRE LA TRAMA PDU COMPLETA
tony63 0:0d2c03fdec12 11 VERIFIQUE CON EL DECODIFICADOR DE ESTA PAGINA::
tony63 1:b0989e540fff 12 PROBADA PARA CUALQUIER LONGITUD VER:abril 27 DEL 2017
tony63 0:0d2c03fdec12 13 http://www.twit88.com/home/utility/sms-pdu-encode-decode
tony63 0:0d2c03fdec12 14 */
tony63 1:b0989e540fff 15 char gi[50];
tony63 1:b0989e540fff 16 char gs[50];
tony63 0:0d2c03fdec12 17 int i,K,C,LENOUT,LENIN;
tony63 1:b0989e540fff 18 void SepToOct(char *DE, char *DS);//se declara la funcion
tony63 0:0d2c03fdec12 19 int main(){
tony63 0:0d2c03fdec12 20 ; //numero de caracteres de abajo
tony63 1:b0989e540fff 21 pc.printf("prueba con gallina cafe\n");
tony63 1:b0989e540fff 22 char gi[]="gallina cafe";
tony63 1:b0989e540fff 23 //en septetos es 67 61 6c 6c 69 6e 61 20 63 61 66 65
tony63 1:b0989e540fff 24 //en octetos es E7 30 9B 9D 76 87 41 E3 B0 B9 0C
tony63 1:b0989e540fff 25 SepToOct(gi,gs);
tony63 1:b0989e540fff 26 for (i=0;i<LENOUT;i++){//imprime resultados
tony63 1:b0989e540fff 27 pc.printf("%2X",gs[i]&0x000000FF);
tony63 1:b0989e540fff 28 }
tony63 1:b0989e540fff 29 pc.printf("\n");
tony63 1:b0989e540fff 30 for (i=0;i<LENOUT;i++){
tony63 1:b0989e540fff 31 pc.printf("-%2X",gs[i]);
tony63 1:b0989e540fff 32 }
tony63 1:b0989e540fff 33 pc.printf("\n");
tony63 1:b0989e540fff 34 pc.printf("LENOUT:%2X,LENIN:%2X\r\n",LENOUT,strlen(gi));// longitudes en hex
tony63 1:b0989e540fff 35 }
tony63 1:b0989e540fff 36 //------------------funcion de interes-- ---------------------------
tony63 1:b0989e540fff 37 void SepToOct(char *DE, char *DS){
tony63 1:b0989e540fff 38 LENIN=strlen(DE); //se mide el tamaño de la cadena de entrada
tony63 1:b0989e540fff 39 int K=0;int C=0; int i=0;
tony63 0:0d2c03fdec12 40 for (i=0;i < LENIN;i++){
tony63 0:0d2c03fdec12 41 DS[i]=DE[i+C]>>K | DE[i+C+1]<<(7-K);
tony63 1:b0989e540fff 42 if (DS[i]==0x00) {LENOUT=i; goto salir99;}// fin de la transformacion
tony63 0:0d2c03fdec12 43 K++;
tony63 0:0d2c03fdec12 44 if (K==7) {K=0;C++;} // se chequea que ya se acabaron los bits en un ciclo de conversion.
tony63 1:b0989e540fff 45 }
tony63 1:b0989e540fff 46 salir99: for (i=0;i<LENOUT;i++){
tony63 1:b0989e540fff 47 DS[i]=DS[i]&0x000000FF;
tony63 0:0d2c03fdec12 48 }
tony63 1:b0989e540fff 49 return;
tony63 1:b0989e540fff 50 }