Keresés

Hirdetés

Aktív témák

  • TheVeryGuest

    senior tag

    válasz PeliScan #17 üzenetére

    Cső sikerült összedobnom valamit. A mellékelt message-eket dekódolja. Stimmelnek az adatok?

    bash-2.05a$ ./smsconv sms1.smi
    Using sms1.smias input file.
    Decoding...
    [Decoder]: SMS Center: 36709996500
    [Decoder]: Sender: 36702956343
    [Decoder]: TimeStamp: 03.12.01. 08:54:12, GMT + 1
    [Decoder]: SMS length: 155
    Udv! Na figyelj, beraktam a cuccost, szal' 2 tajekan a blahanal, ott a padoknal,
    borkabat lesz rajtam es egy springfield szatyor, megismersz biztosan. Csao
    <OK> SMS decoded successfully
    bash-2.05a$ ./smsconv sms2.smi
    Using sms2.smias input file.
    Decoding...
    [Decoder]: SMS Center: 36709996500
    [Decoder]: Sender: 36705136768
    [Decoder]: TimeStamp: 03.12.24. 16:33:57, GMT + 1
    [Decoder]: SMS length: 107
    Köszönöm szépen kedves baratom én is nagyon boldog békés ünnepeket kivanok és persze
    sok ajandékot.Szontesz
    <OK> SMS decoded successfully
    bash-2.05a$

    [Szerkesztve]

    “Perfection is attained not when there is nothing more to add, but when there is nothing more to remove” Antoine de Saint-Exupéry

  • TheVeryGuest

    senior tag

    válasz PeliScan #19 üzenetére

    Írtam, a GSM-es doksi alapján, amit valaki linkelt. Télleg GSM formátumú a cucc, és 7 bitesek a karakterek ezért olyan olvashatatlan. Nem sokat teszteltem, a kódot, de odaadom a forrást és csinosítgathatod ha akarod.

    Linux-on született 2.96-os g++-szal, de biztos le tudod fordítani VC6.0-val is.

    “Perfection is attained not when there is nothing more to add, but when there is nothing more to remove” Antoine de Saint-Exupéry

  • TheVeryGuest

    senior tag

    symbol.h:

    #ifndef _INC_SYMBOL_H_
    #define _INC_SYMBOL_H_

    // Symbols from 0x00 to 0x0f
    #define SYMBOL_COMMERCIAL_AT ''@'' // 64
    #define SYMBOL_POUND_SIGN ''Ł'' // 163
    #define SYMBOL_DOLLAR_SIGN ''$'' // 36
    #define SYMBOL_YEN_SIGN ''Ą'' // 165
    #define SYMBOL_LATIN_SMALL_LETTER_E_WITH_GRAVE ''č'' // 232
    #define SYMBOL_LATIN_SMALL_LETTER_E_WITH_ACUTE ''é'' // 233
    #define SYMBOL_LATIN_SMALL_LETTER_U_WITH_GRAVE ''ů'' // 249
    #define SYMBOL_LATIN_SMALL_LETTER_I_WITH_GRAVE ''ě'' // 236
    #define SYMBOL_LATIN_SMALL_LETTER_O_WITH_GRAVE ''ň'' // 242
    #define SYMBOL_LATIN_CAPITAL_LETTER_C_WITH_CEDILLA ''Ç'' // 199
    #define SYMBOL_LINE_FEED ''/r'' // 10
    #define SYMBOL_LATIN_CAPITAL_LETTER_O_WITH_STROKE ''Ř'' // 216
    #define SYMBOL_LATIN_SMALL_LETTER_O_WITH_STROKE ''ř'' // 248
    #define SYMBOL_CARRIAGE_RETURN ''/n'' // 13
    #define SYMBOL_LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE ''Ĺ'' // 197
    #define SYMBOL_LATIN_SMALL_LETTER_A_WITH_RING_ABOVE ''ĺ'' // 229

    // Symbols from 0x10 to 0x1f
    #define SYMBOL_GREEK_CAPITAL_LETTER_DELTA ''D'' // guess
    #define SYMBOL_LOW_LINE ''_'' // 95
    #define SYMBOL_GREEK_CAPITAL_LETTER_PHI ''Phi'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_GAMMA ''Gamma'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_LAMBDA ''Lambda'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_OMEGA ''Omega'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_PI ''Pi'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_PSI ''Psi'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_SIGMA ''Sigma'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_THETA ''Theta'' // guess
    #define SYMBOL_GREEK_CAPITAL_LETTER_XI ''Xi'' // guess
    #define SYMBOL_ESCAPE_TO_EXTENSION_TABLE ''''
    #define SYMBOL_LATIN_CAPITAL_LETTER_AE ''Ć'' // 198
    #define SYMBOL_LATIN_SMALL_LETTER_AE ''ć'' // 230
    #define SYMBOL_LATIN_SMALL_LETTER_SHARP_S ''S'' // 223
    #define SYMBOL_LATIN_CAPITAL_LETTER_E_WITH_ACUTE ''É'' // 201

    // Symbols from 0x20 to 0x2f
    #define SYMBOL_SPACE '' '' // 32
    #define SYMBOL_EXCLAMATION_MARK ''!'' // 33
    #define SYMBOL_QUOTATION_MARK '''''' // 34
    #define SYMBOL_NUMBER_SIGN ''#'' // 35
    #define SYMBOL_CURRENCY_SIGN ''¤'' // 164 (ISO-8859-1)
    #define SYMBOL_PERCENT_SIGN ''%'' // 37
    #define SYMBOL_AMPERSAND ''&'' // 38
    #define SYMBOL_APOSTROPHE ''''' // 39
    #define SYMBOL_LEFT_PARENTHESIS ''('' // 40
    #define SYMBOL_RIGHT_PARENTHESIS '')'' // 41
    #define SYMBOL_ASTERISK ''*'' // 42
    #define SYMBOL_PLUS_SIGN ''+'' // 43
    #define SYMBOL_COMMA '','' // 44
    #define SYMBOL_HYPHEN_MINUS ''-'' // 45
    #define SYMBOL_FULL_STOP ''.'' // 46
    #define SYMBOL_SOLIDUS ''/'' // 47

    // Symbols from 0x30 to 0x3f
    #define SYMBOL_DIGIT_ZERO ''0'' // 48
    #define SYMBOL_DIGIT_ONE ''1'' // 49
    #define SYMBOL_DIGIT_TWO ''2'' // 50
    #define SYMBOL_DIGIT_THREE ''3'' // 51
    #define SYMBOL_DIGIT_FOUR ''4'' // 52
    #define SYMBOL_DIGIT_FIVE ''5'' // 53
    #define SYMBOL_DIGIT_SIX ''6'' // 54
    #define SYMBOL_DIGIT_SEVEN ''7'' // 55
    #define SYMBOL_DIGIT_EIGHT ''8'' // 56
    #define SYMBOL_DIGIT_NINE ''9'' // 57
    #define SYMBOL_COLON '':'' // 58
    #define SYMBOL_SEMICOLON '';'' // 59
    #define SYMBOL_LESS_THAN_SIGN ''<'' // 60
    #define SYMBOL_EQUALS_SIGN ''='' // 61
    #define SYMBOL_GREATER_THAN_SIGN ''>'' // 62
    #define SYMBOL_QUESTION_MARK ''?'' // 63

    // Symbols from 0x40 to 0x4f
    #define SYMBOL_INVERTED_EXCLAMATION_MARK ''ˇ'' // 161
    #define SYMBOL_LATIN_CAPITAL_LETTER_A ''A'' // 65
    #define SYMBOL_LATIN_CAPITAL_LETTER_B ''B'' // 66
    #define SYMBOL_LATIN_CAPITAL_LETTER_C ''C'' // 67
    #define SYMBOL_LATIN_CAPITAL_LETTER_D ''D'' // 68
    #define SYMBOL_LATIN_CAPITAL_LETTER_E ''E'' // 69
    #define SYMBOL_LATIN_CAPITAL_LETTER_F ''F'' // 70
    #define SYMBOL_LATIN_CAPITAL_LETTER_G ''G'' // 71
    #define SYMBOL_LATIN_CAPITAL_LETTER_H ''H'' // 72
    #define SYMBOL_LATIN_CAPITAL_LETTER_I ''I'' // 73
    #define SYMBOL_LATIN_CAPITAL_LETTER_J ''J'' // 74
    #define SYMBOL_LATIN_CAPITAL_LETTER_K ''K'' // 75
    #define SYMBOL_LATIN_CAPITAL_LETTER_L ''L'' // 76
    #define SYMBOL_LATIN_CAPITAL_LETTER_M ''M'' // 77
    #define SYMBOL_LATIN_CAPITAL_LETTER_N ''N'' // 78
    #define SYMBOL_LATIN_CAPITAL_LETTER_O ''O'' // 79

    // Symbols from 0x50 to 0x5f
    #define SYMBOL_LATIN_CAPITAL_LETTER_P ''P'' // 80
    #define SYMBOL_LATIN_CAPITAL_LETTER_Q ''Q'' // 81
    #define SYMBOL_LATIN_CAPITAL_LETTER_R ''R'' // 82
    #define SYMBOL_LATIN_CAPITAL_LETTER_S ''S'' // 83
    #define SYMBOL_LATIN_CAPITAL_LETTER_T ''T'' // 84
    #define SYMBOL_LATIN_CAPITAL_LETTER_U ''U'' // 85
    #define SYMBOL_LATIN_CAPITAL_LETTER_V ''V'' // 86
    #define SYMBOL_LATIN_CAPITAL_LETTER_W ''W'' // 87
    #define SYMBOL_LATIN_CAPITAL_LETTER_X ''X'' // 88
    #define SYMBOL_LATIN_CAPITAL_LETTER_Y ''Y'' // 89
    #define SYMBOL_LATIN_CAPITAL_LETTER_Z ''Z'' // 90
    #define SYMBOL_LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS ''Ä'' // 196
    #define SYMBOL_LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS ''Ö'' // 214
    #define SYMBOL_LATIN_CAPITAL_LETTER_N_WITH_TILDE ''Ń'' // 209
    #define SYMBOL_LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS ''Ü'' // 220
    #define SYMBOL_SECTION_SIGN ''§'' // 167

    // Symbols from 0x60 to 0x6f
    #define SYMBOL_INVERTED_QUESTION_MARK ''ż'' // 191
    #define SYMBOL_LATIN_SMALL_LETTER_A ''a'' // 97
    #define SYMBOL_LATIN_SMALL_LETTER_B ''b'' // 98
    #define SYMBOL_LATIN_SMALL_LETTER_C ''c'' // 99
    #define SYMBOL_LATIN_SMALL_LETTER_D ''d'' // 100
    #define SYMBOL_LATIN_SMALL_LETTER_E ''e'' // 101
    #define SYMBOL_LATIN_SMALL_LETTER_F ''f'' // 102
    #define SYMBOL_LATIN_SMALL_LETTER_G ''g'' // 103
    #define SYMBOL_LATIN_SMALL_LETTER_H ''h'' // 104
    #define SYMBOL_LATIN_SMALL_LETTER_I ''i'' // 105
    #define SYMBOL_LATIN_SMALL_LETTER_J ''j'' // 106
    #define SYMBOL_LATIN_SMALL_LETTER_K ''k'' // 107
    #define SYMBOL_LATIN_SMALL_LETTER_L ''l'' // 108
    #define SYMBOL_LATIN_SMALL_LETTER_M ''m'' // 109
    #define SYMBOL_LATIN_SMALL_LETTER_N ''n'' // 110
    #define SYMBOL_LATIN_SMALL_LETTER_O ''o'' // 111

    // Symbols from 0x70 to 0x7f
    #define SYMBOL_LATIN_SMALL_LETTER_P ''p'' // 112
    #define SYMBOL_LATIN_SMALL_LETTER_Q ''q'' // 113
    #define SYMBOL_LATIN_SMALL_LETTER_R ''r'' // 114
    #define SYMBOL_LATIN_SMALL_LETTER_S ''s'' // 115
    #define SYMBOL_LATIN_SMALL_LETTER_T ''t'' // 116
    #define SYMBOL_LATIN_SMALL_LETTER_U ''u'' // 117
    #define SYMBOL_LATIN_SMALL_LETTER_V ''v'' // 118
    #define SYMBOL_LATIN_SMALL_LETTER_W ''w'' // 119
    #define SYMBOL_LATIN_SMALL_LETTER_X ''x'' // 120
    #define SYMBOL_LATIN_SMALL_LETTER_Y ''y'' // 121
    #define SYMBOL_LATIN_SMALL_LETTER_Z ''z'' // 122
    #define SYMBOL_LATIN_SMALL_LETTER_A_WITH_DIAERESIS ''ä'' // 228
    #define SYMBOL_LATIN_SMALL_LETTER_O_WITH_DIAERESIS ''ö'' // 246
    #define SYMBOL_LATIN_SMALL_LETTER_N_WITH_TILDE ''ń'' // 241
    #define SYMBOL_LATIN_SMALL_LETTER_U_WITH_DIAERESIS ''ü'' // 252
    #define SYMBOL_LATIN_SMALL_LETTER_A_WITH_GRAVE ''ŕ'' // 224

    #define SYMBOL_FORM_FEED '' '' // 12
    #define SYMBOL_CIRCUMFLEX_ACCENT ''^'' // 94
    #define SYMBOL_LEFT_CURLY_BRACKET ''{'' // 123
    #define SYMBOL_RIGHT_CURLY_BRACKET ''}'' // 125
    #define SYMBOL_REVERSE_SOLIDUS ''\'' // 92
    #define SYMBOL_LEFT_SQUARE_BRACKET ''['' // 91
    #define SYMBOL_TILDE ''~'' // 126
    #define SYMBOL_RIGHT_SQUARE_BRACKET '']'' // 93
    #define SYMBOL_VERTICAL_BAR ''|'' // 124
    #define SYMBOL_EURO_SIGN ''Euro'' // 164 (ISO-8859-15)


    const char *tabSymbol[] = {
    SYMBOL_COMMERCIAL_AT,
    SYMBOL_POUND_SIGN,
    SYMBOL_DOLLAR_SIGN,
    SYMBOL_YEN_SIGN,
    SYMBOL_LATIN_SMALL_LETTER_E_WITH_GRAVE,
    SYMBOL_LATIN_SMALL_LETTER_E_WITH_ACUTE,
    SYMBOL_LATIN_SMALL_LETTER_U_WITH_GRAVE,
    SYMBOL_LATIN_SMALL_LETTER_I_WITH_GRAVE,
    SYMBOL_LATIN_SMALL_LETTER_O_WITH_GRAVE,
    SYMBOL_LATIN_CAPITAL_LETTER_C_WITH_CEDILLA,
    SYMBOL_LINE_FEED,
    SYMBOL_LATIN_CAPITAL_LETTER_O_WITH_STROKE,
    SYMBOL_LATIN_SMALL_LETTER_O_WITH_STROKE,
    SYMBOL_CARRIAGE_RETURN,
    SYMBOL_LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE,
    SYMBOL_LATIN_SMALL_LETTER_A_WITH_RING_ABOVE,

    SYMBOL_GREEK_CAPITAL_LETTER_DELTA,
    SYMBOL_LOW_LINE,
    SYMBOL_GREEK_CAPITAL_LETTER_PHI,
    SYMBOL_GREEK_CAPITAL_LETTER_GAMMA,
    SYMBOL_GREEK_CAPITAL_LETTER_LAMBDA,
    SYMBOL_GREEK_CAPITAL_LETTER_OMEGA,
    SYMBOL_GREEK_CAPITAL_LETTER_PI,
    SYMBOL_GREEK_CAPITAL_LETTER_PSI,
    SYMBOL_GREEK_CAPITAL_LETTER_SIGMA,
    SYMBOL_GREEK_CAPITAL_LETTER_THETA,
    SYMBOL_GREEK_CAPITAL_LETTER_XI,
    SYMBOL_ESCAPE_TO_EXTENSION_TABLE,
    SYMBOL_LATIN_CAPITAL_LETTER_AE,
    SYMBOL_LATIN_SMALL_LETTER_AE,
    SYMBOL_LATIN_SMALL_LETTER_SHARP_S,
    SYMBOL_LATIN_CAPITAL_LETTER_E_WITH_ACUTE,

    SYMBOL_SPACE,
    SYMBOL_EXCLAMATION_MARK,
    SYMBOL_QUOTATION_MARK,
    SYMBOL_NUMBER_SIGN,
    SYMBOL_CURRENCY_SIGN,
    SYMBOL_PERCENT_SIGN,
    SYMBOL_AMPERSAND,
    SYMBOL_APOSTROPHE,
    SYMBOL_LEFT_PARENTHESIS,
    SYMBOL_RIGHT_PARENTHESIS,
    SYMBOL_ASTERISK,
    SYMBOL_PLUS_SIGN,
    SYMBOL_COMMA,
    SYMBOL_HYPHEN_MINUS,
    SYMBOL_FULL_STOP,
    SYMBOL_SOLIDUS,

    SYMBOL_DIGIT_ZERO,
    SYMBOL_DIGIT_ONE,
    SYMBOL_DIGIT_TWO,
    SYMBOL_DIGIT_THREE,
    SYMBOL_DIGIT_FOUR,
    SYMBOL_DIGIT_FIVE,
    SYMBOL_DIGIT_SIX,
    SYMBOL_DIGIT_SEVEN,
    SYMBOL_DIGIT_EIGHT,
    SYMBOL_DIGIT_NINE,
    SYMBOL_COLON,
    SYMBOL_SEMICOLON,
    SYMBOL_LESS_THAN_SIGN,
    SYMBOL_EQUALS_SIGN,
    SYMBOL_GREATER_THAN_SIGN,
    SYMBOL_QUESTION_MARK,

    SYMBOL_INVERTED_EXCLAMATION_MARK,
    SYMBOL_LATIN_CAPITAL_LETTER_A,
    SYMBOL_LATIN_CAPITAL_LETTER_B,
    SYMBOL_LATIN_CAPITAL_LETTER_C,
    SYMBOL_LATIN_CAPITAL_LETTER_D,
    SYMBOL_LATIN_CAPITAL_LETTER_E,
    SYMBOL_LATIN_CAPITAL_LETTER_F,
    SYMBOL_LATIN_CAPITAL_LETTER_G,
    SYMBOL_LATIN_CAPITAL_LETTER_H,
    SYMBOL_LATIN_CAPITAL_LETTER_I,
    SYMBOL_LATIN_CAPITAL_LETTER_J,
    SYMBOL_LATIN_CAPITAL_LETTER_K,
    SYMBOL_LATIN_CAPITAL_LETTER_L,
    SYMBOL_LATIN_CAPITAL_LETTER_M,
    SYMBOL_LATIN_CAPITAL_LETTER_N,
    SYMBOL_LATIN_CAPITAL_LETTER_O,

    SYMBOL_LATIN_CAPITAL_LETTER_P,
    SYMBOL_LATIN_CAPITAL_LETTER_Q,
    SYMBOL_LATIN_CAPITAL_LETTER_R,
    SYMBOL_LATIN_CAPITAL_LETTER_S,
    SYMBOL_LATIN_CAPITAL_LETTER_T,
    SYMBOL_LATIN_CAPITAL_LETTER_U,
    SYMBOL_LATIN_CAPITAL_LETTER_V,
    SYMBOL_LATIN_CAPITAL_LETTER_W,
    SYMBOL_LATIN_CAPITAL_LETTER_X,
    SYMBOL_LATIN_CAPITAL_LETTER_Y,
    SYMBOL_LATIN_CAPITAL_LETTER_Z,
    SYMBOL_LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS,
    SYMBOL_LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS,
    SYMBOL_LATIN_CAPITAL_LETTER_N_WITH_TILDE,
    SYMBOL_LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS,
    SYMBOL_SECTION_SIGN,

    SYMBOL_INVERTED_QUESTION_MARK,
    SYMBOL_LATIN_SMALL_LETTER_A,
    SYMBOL_LATIN_SMALL_LETTER_B,
    SYMBOL_LATIN_SMALL_LETTER_C,
    SYMBOL_LATIN_SMALL_LETTER_D,
    SYMBOL_LATIN_SMALL_LETTER_E,
    SYMBOL_LATIN_SMALL_LETTER_F,
    SYMBOL_LATIN_SMALL_LETTER_G,
    SYMBOL_LATIN_SMALL_LETTER_H,
    SYMBOL_LATIN_SMALL_LETTER_I,
    SYMBOL_LATIN_SMALL_LETTER_J,
    SYMBOL_LATIN_SMALL_LETTER_K,
    SYMBOL_LATIN_SMALL_LETTER_L,
    SYMBOL_LATIN_SMALL_LETTER_M,
    SYMBOL_LATIN_SMALL_LETTER_N,
    SYMBOL_LATIN_SMALL_LETTER_O,
    SYMBOL_LATIN_SMALL_LETTER_P,

    SYMBOL_LATIN_SMALL_LETTER_Q,
    SYMBOL_LATIN_SMALL_LETTER_R,
    SYMBOL_LATIN_SMALL_LETTER_S,
    SYMBOL_LATIN_SMALL_LETTER_T,
    SYMBOL_LATIN_SMALL_LETTER_U,
    SYMBOL_LATIN_SMALL_LETTER_V,
    SYMBOL_LATIN_SMALL_LETTER_W,
    SYMBOL_LATIN_SMALL_LETTER_X,
    SYMBOL_LATIN_SMALL_LETTER_Y,
    SYMBOL_LATIN_SMALL_LETTER_Z,
    SYMBOL_LATIN_SMALL_LETTER_A_WITH_DIAERESIS,
    SYMBOL_LATIN_SMALL_LETTER_O_WITH_DIAERESIS,
    SYMBOL_LATIN_SMALL_LETTER_N_WITH_TILDE,
    SYMBOL_LATIN_SMALL_LETTER_U_WITH_DIAERESIS,
    SYMBOL_LATIN_SMALL_LETTER_A_WITH_GRAVE
    };

    const short tabExtIdx[] = {
    10,
    20,
    40,
    41,
    47,
    60,
    61,
    62,
    64,
    101
    };

    const char *tabExtSymbol[] = {
    SYMBOL_FORM_FEED,
    SYMBOL_CIRCUMFLEX_ACCENT,
    SYMBOL_LEFT_CURLY_BRACKET,
    SYMBOL_RIGHT_CURLY_BRACKET,
    SYMBOL_REVERSE_SOLIDUS ''\'',
    SYMBOL_LEFT_SQUARE_BRACKET,
    SYMBOL_TILDE,
    SYMBOL_RIGHT_SQUARE_BRACKET,
    SYMBOL_VERTICAL_BAR,
    SYMBOL_EURO_SIGN
    };

    #endif // _INC_SYMBOL_H_

    “Perfection is attained not when there is nothing more to add, but when there is nothing more to remove” Antoine de Saint-Exupéry

  • TheVeryGuest

    senior tag

    smsconv.cxx:

    #include <cstdlib>
    #include <cstdio>
    #include <iostream>
    #include ''symbol.h''
    #include <string>

    using namespace std;

    bool convertToSmsChar(unsigned short ch,
    std::string &str) {
    static unsigned short store = 0;

    if (0x1b == ch) {
    store = ch;
    return false;
    } else {
    if (0x00 != store) {
    for (int i = 0; i < sizeof(tabExtIdx)/sizeof(short); ++i) {
    if (tabExtIdx == ch) {
    str += tabExtSymbol
    ;
    }
    }
    store = 0;
    } else {
    str += tabSymbol[ch];
    }
    }
    return true;
    }

    std::string convert7To8Bit(const unsigned char *buff,
    unsigned int len) {
    unsigned char maskLo[] = {
    0x7f,
    0x3f,
    0x1f,
    0x0f,
    0x07,
    0x03,
    0x01
    };

    unsigned char maskHi[] = {
    0x80,
    0xc0,
    0xe0,
    0xf0,
    0xf8,
    0xfc,
    0xfe
    };

    std::string finalStr;
    unsigned int pos = 0;
    unsigned int bitHave = 0;
    unsigned int remainder = 0;

    int lenBit = len * 7;
    int lenByte = lenBit / 8;
    if (0 != (lenBit % 8)) {
    ++lenByte;
    }

    for (int i = 0; i < lenByte; ++i) {
    int value = remainder + ((buff & maskLo[bitHave]) << bitHave);
    remainder = (buff
    & maskHi[bitHave]) >> (7 - bitHave);
    ++bitHave;

    convertToSmsChar(value, finalStr);
    // cout << (char) value << endl;

    if (7 == bitHave) {
    bitHave = 0;
    convertToSmsChar(remainder, finalStr);
    // cout << (char) remainder << endl;
    remainder = 0;
    }
    }
    return finalStr;
    }

    std::string decodeCallNumber(const unsigned char *buff,
    unsigned int size) {
    char strVal[size + 1];
    const unsigned char mask[] = {
    0x0f,
    0xf0
    };

    const unsigned char shift[] = {
    0x00,
    0x04
    };

    for (int i = 0; i < size; ++i) {
    unsigned short val = (buff[i >> 1] & mask[i % 2]) >> shift[i % 2];
    // cout << val << endl;
    strVal = (char) '0' + val;
    }
    strVal[size] = 0;
    return string(strVal);
    }

    int decodeNumber(const unsigned char *buff,
    unsigned int size) {
    int sum = 0;
    const unsigned char mask[] = {
    0x0f,
    0xf0
    };

    const unsigned char shift[] = {
    0x00,
    0x04
    };

    for (int i = 0; i < size; ++i) {
    unsigned short val = (buff[i >> 1] & mask[i % 2]) >> shift[i % 2];
    // cout << val << endl;
    sum = sum * 10 + val;
    }
    return sum;
    }


    std::string decodeTimeStamp(const unsigned char *buff) {
    const unsigned char mask[] = {
    0x0f,
    0xf0
    };

    const unsigned char shift[] = {
    0x00,
    0x04
    };

    const char *tabGmt[] = {
    ''0'',
    ''1'',
    ''2'',
    ''3'',
    ''4'',
    ''5'',
    ''6'',
    ''7'',
    ''8'',
    ''9'',
    ''10'',
    ''11'',
    ''12''
    };

    std::string strTs = decodeCallNumber(buff, 12);
    // cout << strTs << endl;
    strTs.insert(2, ''.'');
    strTs.insert(5, ''.'');
    strTs.insert(8, ''. '');
    strTs.insert(12, '':'');
    strTs.insert(15, '':'');

    int diffGmt = decodeNumber(buff + 6, 2);
    diffGmt = ((diffGmt % 10) * 10 + diffGmt / 10) / 4;
    const char *sign;
    if (diffGmt < 0) {
    diffGmt *= -1;
    sign = '' - '';
    } else {
    sign = '' + '';
    }

    strTs += '', GMT'';
    if (0 != diffGmt) {
    strTs += sign;
    strTs += tabGmt[diffGmt];
    }

    // cout << (int) *(buff + 12) << endl;

    // cout << diffGmt << endl;

    return strTs;
    }

    bool decodeSms(const unsigned char *buff) {
    unsigned short lenSmscInfo = *buff;
    unsigned short typSmscInfo = *(buff + 1);

    // cout << (unsigned int) *buff << endl;

    if ((0x07 != lenSmscInfo) || (0x91 != typSmscInfo)) {
    cerr << ''[Decoder]: unknown format of SMSC info -> skipped '';
    } else {
    cerr << ''[Decoder]: SMS Center: '' << decodeCallNumber(buff + 2, 11) << endl;
    }

    // SMS Delivery byte skipped
    const unsigned char *infoSender = buff + lenSmscInfo + 2;

    unsigned short lenSenderNum = *infoSender;
    unsigned short typSenderNum = *(infoSender + 1);

    // cout << lenSenderNum << endl << typSenderNum << endl;

    if ((0x0b != lenSenderNum) || (0x91 != typSenderNum)) {
    cerr << ''[Decoder]: unknown format of Sender number -> returning '';
    return false;
    } else {
    cerr << ''[Decoder]: Sender: '' << decodeCallNumber(infoSender + 2, 11) << endl;
    }

    const unsigned char *infoTp = infoSender + 8;

    unsigned short pidTp = *infoTp;
    unsigned short dcsTp = *(infoTp + 1);

    if ((0x00 != pidTp) || (0x00 != dcsTp)) {
    cerr << ''[Decoder]: unknown format in TP info -> returning '';
    return false;
    }

    cerr << ''[Decoder]: TimeStamp: '' << decodeTimeStamp(infoTp + 2) << endl;

    unsigned short lenMsg = *(infoTp + 9);

    cerr << ''[Decoder]: SMS length: '' << lenMsg << endl;

    cout << convert7To8Bit(infoTp + 10, lenMsg) << endl;

    return true;
    }

    int main(int argc, char **argv) {
    if (argc < 2) {
    cerr << ''<ERROR> Input file name required. '';
    return 1;
    }

    cerr << ''Using '' << argv[1] << ''as input file. '';

    FILE *f = fopen(argv[1], ''rb'');
    if (!f) {
    cerr << ''<ERROR> File open error ('' << argv[1] << ''). '';
    return 1;
    }

    fseek(f, 0, SEEK_END);
    int szFile = ftell(f);

    if (181 != szFile) {
    cerr << ''<ERROR> Unknown file size ('' << szFile << '') for '' << argv[1] << ''. '';
    return 1;
    }

    unsigned char *bufFile = new unsigned char [szFile];
    if (!bufFile) {
    cerr << ''<ERROR> Memory allocation error ('' << szFile << '' bytes) '';
    return 1;
    }

    rewind(f);
    if (!fread(bufFile, szFile, 1, f)) {
    cerr << ''<ERROR> Error reading file ('' << argv[1] << ''). '';
    delete [] bufFile;
    return 1;
    }

    cerr << ''Decoding... '';

    if (!decodeSms(bufFile + 6)) {
    cerr << ''<ERROR> Decoder error. '';
    delete [] bufFile;
    return 1;
    }

    cerr << ''<OK> SMS decoded successfully '';
    delete [] bufFile;

    return 0;
    }

    “Perfection is attained not when there is nothing more to add, but when there is nothing more to remove” Antoine de Saint-Exupéry

  • TheVeryGuest

    senior tag

    Na, a RIOS-t se forráskód terjesztésre találták ki. ;] Sebaj elküldöm mail-ben is.
    A szimbólumok külön táblában vannak kicserélheted őket, ha nem tetszenek. A görög betűket nem nagyon kerestem.

    Sok szerencsét! :P

    “Perfection is attained not when there is nothing more to add, but when there is nothing more to remove” Antoine de Saint-Exupéry

Aktív témák