реклама на сайте
подробности

 
 
> преобразование числа в строку
sergey sva
сообщение Jan 11 2008, 22:02
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Доброй ночи.

такая проблемка нужно преобразовать число unsigned int в символы char ,использую стандартную функцию компилятора sprintf(mass,"%u\n",count); все бы не чего только эта функция преобразует число инт в восьмеричную систему счисления , тоесть если count инкриминируется 1,2,3,4,5,6,7 после идет 10.
что это такое и как его заставить преобразовывать в dec? не пойму
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aspID
сообщение Feb 5 2008, 12:21
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Код
#ifndef _HEX_STRINGS_H_
#define _HEX_STRINGS_H_

unsigned char * AsciiToChar ( unsigned char * cAsciiString, unsigned char ucLen )
{
    unsigned char * p_ucBuf;
    unsigned char i;
    p_ucBuf = ( unsigned char * ) calloc ( ucLen / 2 + 1, sizeof ( unsigned char ) );

    //Convert HEX string to data
    for ( i = 0; i < ucLen; i += 2 )
    {
        p_ucBuf[ i / 2 ] = ( cAsciiString[ i ] > '9' ) ? ( cAsciiString[ i ] - 'A' + 10 ) : ( cAsciiString[ i ] - '0' );
        p_ucBuf[ i / 2 ] <<= 4;
        p_ucBuf[ i / 2 ] |= ( cAsciiString[ i + 1 ] > '9' ) ? ( cAsciiString[ i + 1 ] - 'A' + 10 ) : ( cAsciiString[ i + 1 ] - '0' );
    }
    
    p_ucBuf [ ucLen / 2 ] = 0;
    return p_ucBuf;
}

unsigned char * CharToAscii ( unsigned char * cHexData, unsigned char ucLen )
{
    unsigned char * p_ucBuf;
    unsigned char  i;
    p_ucBuf = ( unsigned char * ) calloc ( ucLen * 2 + 1, sizeof ( unsigned char ) );

    //Convert data to HEX string
    for ( i = 0; i < ucLen; i ++ )
    {
        p_ucBuf[ i * 2 + 1 ] = ( ( ( cHexData[ i ] ) & 0x0F ) > 9 ) ? ( ( cHexData[ i ] & 0x0F ) + 'A' - 10 ) : ( ( cHexData[ i ] & 0x0F ) + '0' );
        p_ucBuf[ i * 2 ] = ( ( cHexData [ i ] >> 4 ) > 9 ) ? ( ( cHexData[ i ] >> 4 ) + 'A' - 10 ) : ( ( cHexData[ i ] >> 4 ) + '0' );
    }
    
    p_ucBuf [ ucLen * 2 ] = 0;
    return p_ucBuf;
}

unsigned char * OctToSeptSMS ( unsigned char * p_ucData, unsigned char ucLen )
{
    //Convert octets to septets
    unsigned char * p_ucBuf;
    unsigned char i;
    p_ucBuf = ( unsigned char * ) calloc ( ucLen + ucLen / 7 + 1, sizeof ( unsigned char ) );

    unsigned char k, s;
    
    p_ucBuf[ 0 ] = p_ucData[ 0 ] & ~( 1 << 7 );

    for ( i = 1, k  = 7, s = 0; i < ucLen; i++ )
    {
        p_ucBuf[ i + s ] = ( p_ucData[ i - 1 ] >> k ) | ( p_ucData[ i ] << ( 8 - k ) );
        k--;
        if ( k == 1 )
        {
            s++;
            p_ucBuf[ i + s ] = ( p_ucData[ i - 1  ] >> k );
            k = 7;
        }
    }

    p_ucBuf [ ucLen + ucLen / 7 ] = 0;
    return p_ucBuf;
}

unsigned char * SeptToOctSMS ( unsigned char * p_ucData, unsigned char ucLen )
{
    //Convert octets to septets
    unsigned char * p_ucBuf;
    unsigned char i;
    p_ucBuf = ( unsigned char * ) calloc ( ucLen - ucLen / 8 + 1, sizeof ( unsigned char ) );

    unsigned char k, s;

    for ( i = 0, k = 0, s = 0; i < ucLen - 1; i++ )
    {
        p_ucBuf[ i - s ] = ( p_ucData[ i ] >> k ) | ( p_ucData[ i + 1 ] << ( 6 - k ) );
        k++;
        if ( k == 6 )
        {
            s++;
            i++;
            k = 0;
        }
    }

    p_ucBuf[ i - s ] = p_ucData[ i ] >> k;
    p_ucBuf [ ucLen - ucLen / 8 ] = 0;
    return p_ucBuf;
}

#endif //_HEX_STRINGS_H_


Все это для кодирования-декодирования SMS. На данный момент проблема в кодировании-декодировании кириллических сообщений. Не могу найти описания формата sad.gif

Забыл сказать - освобождение памяти - за "головой". Пример использования:
Код
p_ucBuf = AsciiToChar ( (unsigned char *)argv[2], strlen ( argv[2] ) );
p_ucStr = OctToSeptSMS ( (unsigned char *)p_ucBuf, strlen ( (char *) p_ucBuf ) );
free ( p_ucBuf );
p_ucBuf = p_ucStr;
p_ucStr = CharToAscii ( (unsigned char *)p_ucBuf, strlen ( (char *) p_ucBuf ) );
free ( p_ucBuf );
cout << p_ucStr << endl << flush;
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 5 2008, 12:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(aspID @ Feb 5 2008, 15:21) *
Все это для кодирования-декодирования SMS. На данный момент проблема в кодировании-декодировании кириллических сообщений. Не могу найти описания формата
Какой формат? Кодировка UCS2? Это - Unicode.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergey sva   преобразование числа в строку   Jan 11 2008, 22:02
- - sergeeff Jr.   Ну вот тут в самом низу winbatch например написал ...   Jan 11 2008, 22:19
- - zltigo   Цитата(sergey sva @ Jan 12 2008, 00:02) ч...   Jan 11 2008, 22:44
- - Andrеys   не стал создавать новую тему, так будет, наверное,...   Feb 3 2008, 10:01
|- - AHTOXA   Цитата(Andrеys @ Feb 3 2008, 15:01) так о...   Feb 3 2008, 10:45
- - Andrеys   Переобъявил, стало получше) спасибо но числа пока ...   Feb 3 2008, 15:02
|- - AHTOXA   Там в IAR как-то надо подключать нужный вариант pr...   Feb 3 2008, 15:04
- - Andrеys   получилось код теперь выглядит так sprintf(str,...   Feb 3 2008, 15:05
|- - AHTOXA   Цитата(Andrеys @ Feb 3 2008, 20:05) стран...   Feb 3 2008, 15:09
- - sergeeff Jr.   Гляньте еще на функции для конвертирования чисел в...   Feb 3 2008, 15:33
- - Baser   А можно применить и свои, нестандартные функции. О...   Feb 3 2008, 18:00
- - aspID   Пожалуй, сюда же добавлюсь. Есть ли у кого идеи, к...   Feb 4 2008, 17:28
|- - Baser   Цитата(aspID @ Feb 4 2008, 19:28) Есть ли...   Feb 4 2008, 21:59
|- - zltigo   Цитата(Baser @ Feb 5 2008, 00:59) ....нак...   Feb 4 2008, 22:26
|- - Baser   Цитата(zltigo @ Feb 5 2008, 00:26) Торопи...   Feb 6 2008, 11:21
|- - zltigo   Цитата(Baser @ Feb 6 2008, 14:21) Но...   Feb 6 2008, 12:27
- - Andrеys   ЦитатаНе должно такого быть. Давайте лучше пример ...   Feb 5 2008, 12:15
|- - Сергей Борщ   Цитата(Andrеys @ Feb 5 2008, 14:15) я под...   Feb 5 2008, 14:54


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 10:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.05209 секунд с 7
ELECTRONIX ©2004-2016