Linux C 如何把unsigned char 转换成char

dreamzhenzhen 2013-03-29 12:37:24

程序如下:
#include <stdio.h>
#include <openssl/evp.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

main(int argc, char *argv[])
{
EVP_MD_CTX *mdctx;
const EVP_MD *md;
//char mess1[] = "1375844009\n";

unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;
int num;
int flag;
unsigned char mess1[65536];
char d1[65536];
char dgst[]={'c','f','4'};
srand((int) time(0));
num=rand();
printf("test0 num is '%d'\n",num);
sprintf(mess1,"%d",num);
printf("test0 mess1 is '%s'\n",mess1);

OpenSSL_add_all_digests();
if(!argv[1]) {
printf("Usage: mdtest digestname\n");
exit(1);
}//end if
md = EVP_get_digestbyname(argv[1]);

if(!md) {
printf("Unknown message digest %s\n", argv[1]);
exit(1);
}//end if

mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
EVP_MD_CTX_destroy(mdctx);
printf("Digest is: ");
for(i = 0; i < md_len; i++){
printf("%02x", md_value[i]);
}
printf("\n");
sprintf(d1,"%d",md_value);
flag=strncmp(dgst,md_value[0],3);
}//end main
...全文
642 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamzhenzhen 2013-03-30
  • 打赏
  • 举报
回复
抱歉,我还是不知道怎么给分。。
dreamzhenzhen 2013-03-30
  • 打赏
  • 举报
回复
谢谢 楼上诸位热心的解答。这个问题解决了 h_w_m建议的方法很有效,终于不报错了flag=strncmp((char*)dgst,(char*)&md_value[0],3); 再次拜谢! 新手,给分功能还不会用,研究清楚了来加分
dreamzhenzhen 2013-03-29
  • 打赏
  • 举报
回复
对 我是想把md_value按位转换为char型 进行比较的
gfchen1989 2013-03-29
  • 打赏
  • 举报
回复
感觉你不只是要比较前24位,应该是把dgst转换为2进制形式,(或者把md_value按位转换为char型)进行比较
dreamzhenzhen 2013-03-29
  • 打赏
  • 举报
回复
抱歉,不太会用排版功能。重新排了一下版。 unsigned char 转换成char 程序中的md_value 是 unsigned char类型, char dgst[]={'c','f','4'}是char类型, 我想用strncmp()函数比较md_value和dgst前24bit 但是编译程序出错,因为md_value和dgst的类型不同。请问如何统一他们类型进行比较呢。 谢谢大家了! 编译结果 程序如下: #include <stdio.h> #include <openssl/evp.h> #include <stdlib.h> #include <string.h> #include <time.h> main(int argc, char *argv[]) { EVP_MD_CTX *mdctx; const EVP_MD *md; //char mess1[] = "1375844009\n"; unsigned char md_value[EVP_MAX_MD_SIZE]; int md_len, i; int num; int flag; unsigned char mess1[65536]; char d1[65536]; char dgst[]={'c','f','4'}; srand((int) time(0)); num=rand(); printf("test0 num is '%d'\n",num); sprintf(mess1,"%d",num); printf("test0 mess1 is '%s'\n",mess1); OpenSSL_add_all_digests(); if(!argv[1]) { printf("Usage: mdtest digestname\n"); exit(1); }//end if md = EVP_get_digestbyname(argv[1]); if(!md) { printf("Unknown message digest %s\n", argv[1]); exit(1); }//end if mdctx = EVP_MD_CTX_create(); EVP_DigestInit_ex(mdctx, md, NULL); EVP_DigestUpdate(mdctx, mess1, strlen(mess1)); EVP_DigestFinal_ex(mdctx, md_value, &md_len); EVP_MD_CTX_destroy(mdctx); printf("Digest is: "); for(i = 0; i < md_len; i++){ printf("%02x", md_value[i]); } printf("\n"); sprintf(d1,"%d",md_value); flag=strncmp(dgst,md_value[0],3); }//end main
mujiok2003 2013-03-29
  • 打赏
  • 举报
回复

unsigned char uc = 0;
char c = (char)uc;
h_w_m 2013-03-29
  • 打赏
  • 举报
回复
flag=strncmp(dgst,md_value[0],3); ===> flag=strncmp((char*)dgst,(char*)&md_value[0],3); 或 flag=strncmp((char*)dgst,(char*)md_value,3);
dreamzhenzhen 2013-03-29
  • 打赏
  • 举报
回复
md_value转换成char型了,但是有出新的错误,说不是const char,还怎么转换成const char呢
本人新手,麻烦大家了,谢谢各位朋友!

#include <stdio.h>
#include <openssl/evp.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

main(int argc, char *argv[]){
EVP_MD_CTX *mdctx;
const EVP_MD *md;
//char mess1[] = "1375844009\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;
int num;
int flag;
unsigned char mess1[65536];
char d1[65536];
char dgst[]={'c','f','4'};
srand((int) time(0));
num=rand();
printf("test0 num is '%d'\n",num);
sprintf(mess1,"%d",num);
printf("test0 mess1 is '%s'\n",mess1);

OpenSSL_add_all_digests();
//printf("test1: argv[1]is '%s'\n",argv[1]);
if(!argv[1]) {
printf("Usage: mdtest digestname\n");
exit(1);
}//end if

md = EVP_get_digestbyname(argv[1]);
if(!md) {
printf("Unknown message digest %s\n", argv[1]);
exit(1);
}//end if
mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, mess1, strlen(mess1));
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
EVP_MD_CTX_destroy(mdctx);

printf("Digest is: ");

for(i = 0; i < md_len; i++){
printf("%02x", md_value[i]);
}
char md1 = (char)md_value;
printf("\n");

//brute-force method: compare the digest
flag=strncmp(dgst,md1,3);
}//end main

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧