读书人

Linux C 怎么把unsigned char 转换成c

发布时间: 2013-04-02 12:35:26 作者: rapoo

Linux C 如何把unsigned char 转换成char

程序如下:
#include <stdio.h>
#include <openssl/evp.h>
#include <stdlib.h>Linux C 怎么把unsigned char 转换成char
#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

[解决办法]


unsigned char uc = 0;
char c = (char)uc;

[解决办法]
感觉你不只是要比较前24位,应该是把dgst转换为2进制形式,(或者把md_value按位转换为char型)进行比较
[解决办法]
flag=strncmp(dgst,md_value[0],3);
===>
flag=strncmp((char*)dgst,(char*)&md_value[0],3);

flag=strncmp((char*)dgst,(char*)md_value,3);

读书人网 >C语言

热点推荐