char * 与unsigned char *

redfu 2008-04-20 08:14:55
请问,在C语言中char * 转换为unsigned char *怎么转,我用强制转换(unsigned)居然报错,并且把char变为int 了
...全文
189 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
等待牛人来答.
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
不会,帮顶
redfu 2008-04-20
  • 打赏
  • 举报
回复
不行啊,这个函数是库里面定义好了的
iu_81 2008-04-20
  • 打赏
  • 举报
回复
那你就定义unsigned int mdlen;
redfu 2008-04-20
  • 打赏
  • 举报
回复
直接用mdout就是第一个错误

改成这样ret=X509_REQ_digest(req,md,(unsigned char *)mdout,(unsigned int*)(&mdlen));
错误更多了22个
sxsong_04 2008-04-20
  • 打赏
  • 举报
回复
用reinterpret_cast<type> 可将一种类型转换为不同类型,比如可将指针转换成整数。
#include<iostream>
using namespace std;

void fun(unsigned char* t)
{
cout<<t<<endl;
}

int main()
{
char* t = "abcd";
fun(reinterpret_cast<unsigned char*>(t));
system("pause");
}
zhangxichao 2008-04-20
  • 打赏
  • 举报
回复
函数声明:
int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, unsigned char *md,
unsigned int *len);

问题是mdlen是int,不是unsigned int,改成这样试试:
ret=X509_REQ_digest(req,md,(unsigned char *)mdout,(unsigned int*)(&mdlen));
iu_81 2008-04-20
  • 打赏
  • 举报
回复
直接用mdout不就行了
redfu 2008-04-20
  • 打赏
  • 举报
回复
未加(unsigned char *)之前,提示:error C2664: 'X509_REQ_digest' : cannot convert parameter 3 from 'char [20]' to 'unsigned char *'

加了后提示:error C2664: 'X509_REQ_digest' : cannot convert parameter 4 from 'int *' to 'unsigned int *'
要怎么处理?
zhangxichao 2008-04-20
  • 打赏
  • 举报
回复
能给出详细的警告信息吗,“把char变为int 了”,编译器的原有提示是什么?
redfu 2008-04-20
  • 打赏
  • 举报
回复
要装openssl的,红色的那句,居然提示char 成了int型
#include <string.h>
#include <openssl/x509.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>

int main()
{
X509_REQ *req;
int ret;
long version;
X509_NAME *name;
EVP_PKEY *pkey;
RSA *rsa;
X509_NAME_ENTRY *entry=NULL;
char bytes[100],mdout[20];
int len,mdlen;
int bits=512;
unsigned long e=RSA_3;
unsigned char *der,*p;
FILE *fp;
const EVP_MD *md;
X509 *x509;
BIO *b;
STACK_OF(X509_EXTENSION) *exts;

req=X509_REQ_new();
version=1;
ret=X509_REQ_set_version(req,version);
name=X509_NAME_new();
strcpy(bytes,"openssl");
len=strlen(bytes);
entry=X509_NAME_ENTRY_create_by_txt(&entry,"commonName",V_ASN1_UTF8STRING,(unsigned char *)bytes,len);
X509_NAME_add_entry(name,entry,0,-1);
strcpy(bytes,"bj");
len=strlen(bytes);
entry=X509_NAME_ENTRY_create_by_txt(&entry,"countryName",V_ASN1_UTF8STRING,(const unsigned char *)bytes,len);
X509_NAME_add_entry(name,entry,1,-1);

/* subject name */
ret=X509_REQ_set_subject_name(req,name);
/* pub key */
pkey=EVP_PKEY_new();
rsa=RSA_generate_key(bits,e,NULL,NULL);
EVP_PKEY_assign_RSA(pkey,rsa);
ret=X509_REQ_set_pubkey(req,pkey);
/* attribute */
strcpy(bytes,"test");
len=strlen(bytes);
ret=X509_REQ_add1_attr_by_txt(req,"organizationName",V_ASN1_UTF8STRING,(const unsigned char *)bytes,len);
strcpy(bytes,"ttt");
len=strlen(bytes);
ret=X509_REQ_add1_attr_by_txt(req,"organizationalUnitName",V_ASN1_UTF8STRING,(const unsigned char *)bytes,len);
md=EVP_sha1();

ret=X509_REQ_digest(req,md,(unsigned char *)mdout,&mdlen);
ret=X509_REQ_sign(req,pkey,md);
if(!ret)
{
printf("sign err!\n");
X509_REQ_free(req);
return -1;
}
/* 写入文件PEM格式 */
b=BIO_new_file("certreq.txt","w");
PEM_write_bio_X509_REQ(b,req);
BIO_free(b);
/* DER编码 */
len=i2d_X509_REQ(req,NULL);
der=(unsigned char *)malloc(len);
p=der;
len=i2d_X509_REQ(req,&p);
OpenSSL_add_all_algorithms();
ret=X509_REQ_verify(req,pkey);
if(ret<0)
{
printf("verify err.\n");
}
fp=fopen("certreq2.txt","wb");
fwrite(der,1,len,fp);
fclose(fp);
free(der);
X509_REQ_free(req);
return 0;
}
daiguoliangfirst 2008-04-20
  • 打赏
  • 举报
回复
对啊,我在console下试了一下也没错啊
Yun0825 2008-04-20
  • 打赏
  • 举报
回复
强制转换,console下没有错。
嵌云阁主 2008-04-20
  • 打赏
  • 举报
回复
不会吧?把你的代码贴出来看看
redfu 2008-04-20
  • 打赏
  • 举报
回复
问题是,我这样了,结果还是错,并且,char都成了int
还有别的解么?
wzlhahr 2008-04-20
  • 打赏
  • 举报
回复
直接用(unsigned char*)吧,不过这种转换是危险的,因为识别出来的内容可能会变化,出现期望以外的东西

69,368

社区成员

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

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