char类型转换问题,100分送上

wangkunhong 2012-07-14 08:04:17
void JNICALL defabc(jint class_data_len, const unsigned char* class_data,
jint* new_class_data_len, unsigned char** new_class_data)
{
char old_data[] = class_data;//这里如何转换成char[]类型
char result[1024];
unsigned char key[] = "aaaaaaa-10110101";
AES aes(key);
aes.Bm53InvCipher(old_data, result);//解密方法,void Bm53InvCipher(char *inut, char *output);
printf("%s\n",result);

*new_class_data_len = strlen(result)//长度.....
*new_class_data = result//这里如何转换.....
}

注:我对C++基本上是皮毛,主要是搞java的,工作中要写一个dll,不得不写c++,请各位兄台帮忙.
...全文
123 点赞 收藏 13
写回复
13 条回复
wangkunhong 2012年07月15日
算了,自己多试一下吧。。。结贴
回复 点赞
kid_408 2012年07月15日
我是来学习的
回复 点赞
wangkunhong 2012年07月15日
我用unsigned char* old_data = const_cast <unsigned char *> (class_data);可以了

但是现在有个问题,就是class_data的内容怎么只有一点点哦,好像没全部读出来,打印原来的const unsigned char* class_data也只有一点点
回复 点赞
wangkunhong 2012年07月15日
改了还是编译不通过,error C2664: 'strcpy' : cannot convert parameter 1 from 'unsigned char *' to 'char *'
回复 点赞
wangkunhong 2012年07月15日
谢谢各位啦,明白啦^_^
回复 点赞
pathuang68 2012年07月14日
[Quote=引用 7 楼 的回复:]

char* old_data =(char*) malloc(class_data_len+1);//如果函数结束后不需要该变量就使用free释放掉
strcpy(old_data,class_data);//如果不是字符,而是数据的话就使用memcpy

这句编译也出现下面错误
error C2664: 'strcpy' : cannot convert parameter 2 fro……
[/Quote]

那就做转型试试:

char* old_data =(char*) malloc(class_data_len+1);
//改成
unsigned char* old_data =(unsigned char*) malloc(class_data_len+1);

char result[1024];
//改成
unsigned char result[1024];

所有相关的地方,都做类似的改动
回复 点赞
wangkunhong 2012年07月14日
char* old_data =(char*) malloc(class_data_len+1);//如果函数结束后不需要该变量就使用free释放掉
strcpy(old_data,class_data);//如果不是字符,而是数据的话就使用memcpy

这句编译也出现下面错误
error C2664: 'strcpy' : cannot convert parameter 2 from 'const unsigned char *' to 'const char *'
回复 点赞
wangkunhong 2012年07月14日
感谢 (玄机逸士)

strcpy(*new_class_data, result);这句编译出现下面错误
error C2664: 'strcpy' : cannot convert parameter 1 from 'unsigned char *' to 'char *'
回复 点赞
pathuang68 2012年07月14日
[Quote=引用 4 楼 的回复:]

感谢 (笨笨熊)

C/C++ code

*new_class_data_len = strlen(result)//长度.....,这里不知道有没有什么问题
*new_class_data = result//这里的result是char[]格式的,*new_class_data是unsigned char*,也需要转换
[/Quote]

最好在char result[1024];后面加上一句:
memset(result, 0, 1024);

*new_class_data_len = strlen(result)这样的写法没有问题,你的new_class_data_len是传出参数。

*new_class_data = result;这个写法应该改为:
strcpy(*new_class_data, result);
回复 点赞
wangkunhong 2012年07月14日
感谢 (笨笨熊)


*new_class_data_len = strlen(result)//长度.....,这里不知道有没有什么问题
*new_class_data = result//这里的result是char[]格式的,*new_class_data是unsigned char*,也需要转换
回复 点赞
W170532934 2012年07月14日

void JNICALL defabc(jint class_data_len, const unsigned char* class_data,
jint* new_class_data_len, unsigned char** new_class_data)
{
char* old_data =(char*) malloc(class_data_len+1);//如果函数结束后不需要该变量就使用free释放掉
strcpy(old_data,class_data);//如果不是字符,而是数据的话就使用memcpy
char result[1024];
unsigned char key[] = "aaaaaaa-10110101";
AES aes(key);
aes.Bm53InvCipher(old_data, result);//解密方法,void Bm53InvCipher(char *inut, char *output);
printf("%s\n",result);

*new_class_data_len = strlen(result)//长度.....
*new_class_data = result//这里如何转换?什么意思?
}

回复 点赞
wangkunhong 2012年07月14日
[Quote=引用 1 楼 的回复:]

写法不同啊,一样的啊。只不过存储的地方不一样,数组可以改变值,另一个是存储在常量区。
[/Quote]

呵呵,感谢您的回复,我需要原生的代码哈,讲理论我消化不了……^-^
回复 点赞
未注销 2012年07月14日
写法不同啊,一样的啊。只不过存储的地方不一样,数组可以改变值,另一个是存储在常量区。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告