очень начинающий ~_~ есть строка unsigned shar, получаю её как выхлоп с одной функции. (~к примеру) есть моя char строка, с которой её надо сравнить. как это сделать? язык си. не cpp может как то можно просто char в unsigned преобразовать? и уже потом при помощи strcmp сравнить...
ууууух... а в чем существенное отличие signed char от unsigned char, как ты думаешь? в плане символов, а не байтов...
unsigned char гарантированно беззнаковый, а char может быть как знаковым, так и беззнаковым. а char всегда является отдельным типом - он не совпадает ни с signed char, ни с unsigned char. знаю только это
expert если не ошибаюсь у борланда умолчания на счет этого задаются в настройках, но вроде бы по умолчанию он все же знаковый. на счет ms не знаю.
blablabla На самом деле char или знаковый, или беззнаковый, то есть совпадает по поведению или с signed char или с unsigned char. Однако, для языка это три разных типа. Что есть "выхлоп"? Рашн, плиз. Наверное, имеется ввиду что-то типа: Код (Text): unsigned char* f1(); /* или так: */ void f2( unsigned char* ); void f() { char* my_string = "my string"; if( strcmp( (char*)f1(), my_sring ) == 0 ) { /* blah-blah-blah... */ } unsigned char tmp[256]; f2( tmp ); if( strcmp( (char*)tmp, my_string ) == 0 ) { /* blah-blah-blah... */ } char tmp2[256]; f2( (unsigned char*) tmp2 ); if( strcmp( tmp2, my_string ) == 0 ) { /* blah-blah-blah... */ } } что-то типа такого... на равно-не равно можно проверять смело, а вот если сравнивать меньше-больше - можно лажануться, тут надо аккуратно.
expert Не-а... читай стандарт. На m68k, например, char беззнаковый, емнип. Для х86 это пофик, поэтому задается опцией компилера, но по умолчанию - как правило, но не обязательно - таки знаковый.
у меня dev-cpp т.е. gcc компилятор на виндах http://www.polarssl.org/show_source?file=hash/hello вот эта программка. мне нужно как то сравнить unsigned char строку digest с моей. только есть проблема. в примере выводится в 16-ричном формате, а можно выводить в 10тичном формате при помощи %d. какой формат должна иметь строка mydigest чтобы сравнивать с полученной от функции md5? т.е. если от md5('Hello, world!') получается 6cd3556debda54bca6b4c39479839 в hex или 10821185109235131657520261176577115257 в dec то это только из за форматного вывода printf Какой была строка изначально я не знаю вот так код подправил, чтобы в первую (т.е. нулевую) ячейку массива х заносился форматный hex и потом сравнивался с моей строкой mydig Код (Text): /* * Classic "Hello, world" demonstration program * Modified by blablabla [http://wasm.ru/forum/viewtopic.php?id=36948] * Copyright (C) 2006-2009, Paul Bakker <polarssl_maintainer at polarssl.org> * All rights reserved. * * Joined copyright on original XySSL code with: Christophe Devine * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include "polarssl/md5.h" int main( void ) { int i; unsigned char x[64]; char mydig[64]="6cd3556debda54bca6b4c39479839"; unsigned char digest[16]; char str[] = "Hello, world!"; printf( "\n MD5('%s') = ", str ); md5( (unsigned char*) str, 13, digest ); for( i = 0; i < 16; i++ ) printf( "%x", digest[i] ); printf( "\n" ); for( i = 0; i < 16; i++ ) {printf( "%d", digest[i] ); }; printf( "\n" ); for( i = 0; i < 16; i++ ) { sprintf( x, "%x", digest[i] ); if (mydig[i] == (char)x[0] ) printf( "lol\n" ); else printf( "-_-\n" ); }; printf( "\n\n" ); #ifdef WIN32 printf( " Press Enter to exit this program.\n" ); fflush( stdout ); getchar(); #endif return( 0 ); }
вот только в выше привелённом листинге я всё равно не правильно делаю (~вроде) потому что sprintf добавляет \0 Это ведь совсем не хорошо в моем примере? еще поправил, там вобще Unhandled page fault on write access to 0x0000007b at address 0x681cd06f хотя, по идее, должно работать Код (Text): /* * Classic "Hello, world" demonstration program * * Copyright (C) 2006-2009, Paul Bakker <polarssl_maintainer at polarssl.org> * All rights reserved. * * Joined copyright on original XySSL code with: Christophe Devine * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _CRT_SECURE_NO_DEPRECATE #define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include "polarssl/md5.h" int main( void ) { int i; unsigned char x; char nmydig; char mydig[64]="6cd3556debda54bca6b4c39479839"; unsigned char digest[16]; char str[] = "Hello, world!"; printf( "\n MD5('%s') = ", str ); md5( (unsigned char*) str, 13, digest ); for( i = 0; i < 16; i++ ) printf( "%x", digest[i] ); printf( "\n" ); for( i = 0; i < 16; i++ ) {printf( "%d", digest[i] ); }; printf( "\n" ); for( i = 0; i < 16; i++ ) { sprintf( x, "%x", digest[i] ); nmydig=mydig[i]; if (strcmp((char*)x, nmydig ) == 0) printf( "lol\n" ); else printf( "-_-\n" ); }; printf( "\n\n" ); #ifdef WIN32 printf( " Press Enter to exit this program.\n" ); fflush( stdout ); getchar(); #endif return( 0 ); }