#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
#8 15.06.11 13:54
Re: преобразование типов
ну у меня есть строка типа unsigned char длинной 32 символа. мне ее посимвольно нужно вывести в файл, причем в 16ричной кодировке. ну то есьб чтобы файл вот такой например бы:
A4 45 BE .... ну и т.д., то есть каждай символ это сочетание от 0 до F по два раза. ну кто знает поймет, не знаю как выразиться. в общем то что мы записываем вот в таком виде 0xAF например
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
#12 15.06.11 19:49
#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

