VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 476|回复: 8

[求助] 求大神帮我把这代码string转为char

[复制链接]
51_avatar_middle
在线会员 jabbie 发表于 2018-4-19 01:04:35 | 显示全部楼层 |阅读模式
3驿站币
CString abc(CString S, WORD Key)
{
        CString Result,str;
        int i,j;
        Result.Empty();
        for(i=0; i < S.GetLength()/2; i++)
        {
                j = ((BYTE)S.GetAt(2*i)-C3)*26;
                j += (BYTE)S.GetAt(2*i+1)-C3;
                str="1";
                str.SetAt(0, j);
                Result+=str;
        }
        S=Result;
        for(i=0; i<S.GetLength(); i++)
        {
                Result.SetAt(i,(BYTE)S.GetAt(i)^(Key>>8));
                Key = ((BYTE)S.GetAt(i)+Key)*C1+C2;
        }
        return Result;
}
求大神帮我把这代码string转为char,感谢感谢,在线等.......





上一篇:用for循环计算圆周率,为什么和我想要的答案不对,求大佬
下一篇:求大神帮我把这代码string转为char

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-4-19 01:32:42 | 显示全部楼层
本想帮楼主改下来着,可 C1、C2、C3 都是什么类型的,没定义啊?
补充下吧!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| jabbie 发表于 2018-4-19 02:08:24 | 显示全部楼层
#define C1 52845
#define C2 22719
#define C3 65

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| jabbie 发表于 2018-4-19 02:12:50 | 显示全部楼层
Syc 发表于 2018-4-19 01:32
本想帮楼主改下来着,可 C1、C2、C3 都是什么类型的,没定义啊?
补充下吧!


#define C1 52845
#define C2 22719
#define C3 65

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

01_avatar_middle
online_admins admin 发表于 2018-4-19 10:15:04 | 显示全部楼层
  1. char* abc(char* S, WORD Key)
  2. {
  3.         int nLen = strlen(S);
  4.         char* pRet = new char[nLen + 1];
  5.         char* pTmp = new char[nLen + 1];
  6.         memset(pRet, 0, nLen + 1);
  7.         memset(pTmp, 0, nLen + 1);

  8.         int i = 0, j = 0;
  9.         for (i = 0; i < nLen / 2; i++)
  10.         {
  11.                 j = ((BYTE)S[2 * i] - C3) * 26;
  12.                 j += (BYTE)S[2 * i + 1] - C3;
  13.                 pRet[i] = j;
  14.         }

  15.         strcpy(pTmp, pRet);
  16.         for (i = 0; i < nLen; i++)
  17.         {
  18.                 pRet[i] = (BYTE)pTmp[i] ^ (Key >> 8);
  19.                 Key = ((BYTE)pTmp[i] + Key)*C1 + C2;
  20.         }

  21.         delete[] pTmp;
  22.         return pRet;
  23. }
复制代码


试试,不过别忘了在使用完 abc 函数返回的 char* 指针之后 要进行 delete 操作,不然会有内存泄漏的。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| jabbie 发表于 2018-4-19 18:53:00 | 显示全部楼层
admin 发表于 2018-4-19 10:15
试试,不过别忘了在使用完 abc 函数返回的 char* 指针之后 要进行 delete 操作,不然会有内存泄漏的。

编译通过,但是执行结果不行哦,这个是vc字符串加密的函数,下面也贴上加密的函数,我加的key是    WORD key=596845;
CString Decrypt(CString S, WORD Key) // 解密函数
{
        CString Result,str;
        int i,j;
        Result.Empty(); // 清除结果
        for(i=0; i < S.GetLength()/2; i++) // 将字符串两个字母一组进行处理
        {
                j = ((BYTE)S.GetAt(2*i)-C3)*26;//相应的,解密处要改为相同的数
                j += (BYTE)S.GetAt(2*i+1)-C3;
                str="1"; // 设置str长度为1
                str.SetAt(0, j);
                Result+=str; // 追加字符,还原字符串
        }
        S=Result; // 保存中间结果
        for(i=0; i<S.GetLength(); i++) // 依次对字符串中各字符进行操作
        {
                Result.SetAt(i,(BYTE)S.GetAt(i)^(Key>>8)); // 将密钥移位后与字符异或
                Key = ((BYTE)S.GetAt(i)+Key)*C1+C2; // 产生下一个密钥
        }
        return Result;
}

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| jabbie 发表于 2018-4-19 18:54:37 | 显示全部楼层
admin 发表于 2018-4-19 10:15
试试,不过别忘了在使用完 abc 函数返回的 char* 指针之后 要进行 delete 操作,不然会有内存泄漏的。

是不是都要转化char,大神看看

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-4-20 11:59:21 | 显示全部楼层
jabbie 发表于 2018-4-19 18:54
是不是都要转化char,大神看看

参考着我之前给你的解决方案,解密函数试着自己搞定吧!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
ico_lz  楼主| jabbie 发表于 2018-4-20 19:47:29 | 显示全部楼层
Syc 发表于 2018-4-20 11:59
参考着我之前给你的解决方案,解密函数试着自己搞定吧!

大神好人帮忙到底把下面代码也转化一下吧,我自己肯定搞不定
CString Encrypt(CString S, WORD Key) // 加密函数
{
        CString Result,str;
        int i,j;
        Result=S;
        for(i=0; i<S.GetLength(); i++)
        {
                Result.SetAt(i, S.GetAt(i)^(Key>>8));
                Key = ((BYTE)Result.GetAt(i)+Key)*C1+C2;
        }
        S=Result;
        Result.Empty();
        for(i=0; i<S.GetLength(); i++)
        {
                j=(BYTE)S.GetAt(i);
                str="12";
                str.SetAt(0, C3+j/26);
                str.SetAt(1, C3+j%26);
                Result += str;
        }
        return Result;
}

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-11 05:05

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表