Официальный сайт студ.городка НГТУ
Программирование и БД » преобразование типов 

#1  13.06.11 19:11

преобразование типов

имею строку символов типа unsigned char

пытаюсь ее посимвольно вывести в файлик вот так

ofstream of("out.txt");
for ( int i = 0; i < 32; ++i )
{
    of << buf[i];
}

ну и он мне выводит символы в какой-то другой кодировке.

как сделать чтобы выводил нормально?

Offline

#2  14.06.11 00:48

Re: преобразование типов

Вдумайтесь в смыл беззнаковый знак и поймете почему получили фигню.

Offline

#3  14.06.11 01:21

Re: преобразование типов

unsigned char от 0 до 127 а просто char от -128 до 127? не?

Offline

#4  14.06.11 07:47

Re: преобразование типов

по-моему char всегда был unsigned int. Посмотри на таблицу ANSI кодов

Offline

#5  14.06.11 10:10

Re: преобразование типов

Flinn написал(а):

unsigned char от 0 до 127 а просто char от -128 до 127? не?

не

Offline

#6  14.06.11 11:31

Re: преобразование типов

Flinn написал(а):

unsigned char от 0 до 127 а просто char от -128 до 127? не?

unsigned char от 0 до 255, char от -128 до 127. но это для обычного С.

попробуй делать типа

Код::

of << (char)buf[i];

или

Код::

of << (char)(buf[i]-128);

Offline

#7  14.06.11 15:02

Re: преобразование типов

Напиши код полнее, а то так сложно понять, почему косячит.

Исправлено Revenger (14.06.11 15:02)

Offline

#8  15.06.11 13:54

Re: преобразование типов

ну у меня есть строка типа unsigned char длинной 32 символа. мне ее посимвольно нужно вывести в файл, причем в 16ричной кодировке. ну то есьб чтобы файл вот такой например бы:
A4 45 BE .... ну и т.д., то есть каждай символ это сочетание от 0 до F по два раза. ну кто знает поймет, не знаю как выразиться. в общем то что мы записываем вот в таком виде 0xAF например

Offline

#9  15.06.11 16:17

$up
Профиль

Re: преобразование типов

Flinn, itoa ?

Offline

#10  15.06.11 17:42

Re: преобразование типов

в общем вот все что я имею, сразу скажу это не моя лабуда, попросили помочь натянуть MFC оболочку на эту дрянь. вкратце, имеем сообщение неизвестной длины, для этого сообщения генерируем хеш код, ну и якобы отправляем его клиенту. клиент принимает хеш код и сообщение, генерирует для сообщения свой хеш код по тому же алгоритму, и сравнивает его с пришедшим кодом. если они совпадают радуемся. ну обычное взаимодействие по сети, все знают.

вот функция мейновская:
typedef unsigned char byte;

int main()
{
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);

    byte buf[1024];
    int len;
    byte hashed[32];

    len = 0;
    while (scanf("%c", &buf[len]) != EOF)
    {
        len++;
    }

    hash(buf, len, hashed);

    for (int i = 31; i >= 0; i--)
    printf("%02X", hashed[i]);
    printf("\n");


    for(int i=0; i<len; i++)
    {
        printf("%c",buf[i]);
    }

    return 0;
}

вот здесь     hash(buf, len, hashed); и происходит генерация хеш кода.

вот в таком виде все работает. сообщение и хеш код нормально выводится в файл.

а если делаю так
void CProjectDlg::OnBnClickedButton3()
{
    // TODO: Add your control notification handler code here

    byte buf[1024];
    int len;
    byte hashed[32];
    char ch;

    freopen((LPCSTR)m_sOutFileWay.GetString(), "w", stdout);

    std::ifstream in(m_sInFileWay);

    for ( len = 0; !in.eof(); ++len )
    {
        in.get(ch);
        buf[len] = (byte)ch;
    };

    hash(buf, len, hashed);

    for ( int i = 31; i >= 0; --i )
    {
        printf("%02X", hashed[i]);
    };
    printf("\n");

    for( int i = 0; i < len; ++i )
    {
        printf("%c", buf[len]);
    };

    m_sCode = hashed;
    UpdateData(FALSE);
};

выводится вместо хеша какая-то фигня.
m_sOutFileWay и m_sInFileWay это CString'и

ну или как нить можно КСтринг преобразовать в аргумент для функции freopen();

Offline

#11  15.06.11 18:32

$up
Профиль

Re: преобразование типов

Зачем тебе в гуёвом приложении нужны файлы и перенаправление ввода-вывода мне непонятно.
Вместо freopen и printf("%02X", hashed[i]);

Код: cpp:

CString csCode;
csCode.Format(_T("%02X"), hashed[i]);
m_sOutFileWay += csCode;

Offline

#12  15.06.11 19:49

Re: преобразование типов

да было бы мне сделал бы по-уму. спс щас попробую.

Offline

#13  15.06.11 20:11

Re: преобразование типов

спасибо сделал. если кому надо, вот:

void CProjectDlg::OnBnClickedButton3()
{
    // TODO: Add your control notification handler code here
    CString str;

    byte buf[1024];
    int len;
    byte hashed[32];
    char ch;

    std::ifstream in(m_sInFileWay);
    std::wofstream of(m_sOutFileWay);

    for ( len = 0; !in.eof(); ++len )
    {
        in.get(ch);
        buf[len] = (byte)ch;
    };
    in.close();

    hash(buf, len, hashed);

    for ( int i = 0; i < 32; ++i )
    {
        CString csCode;
        csCode.Format(_T("%02X"), hashed[i]);
        str += csCode;
    };
    m_sCode = str;
    str += _T("\n");

    for( int i = 0; i < len; ++i )
    {
        CString csCode;
        csCode.Format(_T("%c"), buf[i]);
        str += csCode;
    };

    of << str.GetString();
    of.close();

    UpdateData(FALSE);
};

могу сюда же функцию создания хеш значения выложить если вдруг кому надо

Offline

Программирование и БД » преобразование типов 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.122 сек.
Выполнено 11 запросов.