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++,请各位兄台帮忙.
...全文
174 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
写法不同啊,一样的啊。只不过存储的地方不一样,数组可以改变值,另一个是存储在常量区。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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