JS算法求助

2024无限可能! 2021-04-19 08:16:16
有这样一个字符串
“%D6%D0%CE12%25%C4”
我要转成这样:
D6D0CE0031003225C4

并且要求能互相反转!!!!
JS渣渣一枚,在线求助大佬!!!!
...全文
277 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2021-04-21
  • 打赏
  • 举报
回复
引用 2 楼 苪玫儿呀 的回复:
[quote=引用 1 楼 weixin_37226778 的回复:]你这没有转换规则啊
有啊,数字、字母转化成00+Ascii码[/quote]

function encode (str) {
    return str.replace(/%[A-Z][0-9]|%[0-9][A-Z]|%[0-9]{2}|%[A-Z]{2}|[a-zA-Z0-9]/g, m => {
        return m.length === 1 ? '00' + m.charCodeAt(0).toString(16) : m.replace('%', '')
    })
}
function decode (str) {
    return str.replace(/[A-Z][0-9]|[0-9][A-Z]|[1-9]{2}|00[0-9]{2}/g, m => {
        return m.length === 2 ? '%' + m : String.fromCharCode(parseInt(m, 16))
    })
}
const str = 'a12%D6%D012%25%C4%D013abcdefed'
const enStr = encode(str)
const deStr = decode(enStr)

console.log(str, enStr, deStr)
我只是按你说明。按我理解:加密时%+后面两个字符去除百分号原样输出,解密时要加回来 你看看是不是你想的的 然后:你为啥一直折腾这个呀?这有点奇葩。俺也一直不敢问……
wubing1111 2021-04-21
  • 打赏
  • 举报
回复
你这规则不怎么明显既然CE12要转换为什么D6不转换呢?难道只转换CE12这个字符?
我这代码可参考,转换了之后 自己根据数组反转。
并且你这根本ASCII十六进制吧。
------------------------------------------------------------
<p id="demo">单击按钮显示分割后的数组</p>
<button onclick="myFunction()">点我</button>
<script>
function myFunction(){
str="%D6%D0%CE12%25%C4"; //这是一字符串
var strs= new Array(); //定义一数组
strs=str.split("%"); //字符分割
var v_str= "";
for (i=0;i<strs.length ;i++ )
{
if(i==3)
{
v_str+=strs[i].substring(0,2)+"00"+strs[i].substring(2,3).charCodeAt().toString(16)+"00"+strs[i].substring(3,4).charCodeAt().toString(16);
}
else
{
v_str+=strs[i];
}



}
document.getElementById("demo").innerHTML=v_str;
}

</script>
文盲老顾 2021-04-21
  • 打赏
  • 举报
回复
(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9a-f])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('a12%D6%D012%25%C4%D013abcdefed')
把正则稍微调整下即可,[0-9]修改成[0-9a-z]就支持字母了
weixin_50944805 2021-04-20
  • 打赏
  • 举报
回复
没有看出规律
  • 打赏
  • 举报
回复
引用 7 楼 苪玫儿呀的回复:
[quote=引用 6 楼 苪玫儿呀 的回复:][quote=引用 4 楼 文盲老顾 的回复:]


(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('%D6%D0%CE12%25%C4')

(function(s){var c=s.match(/(00[0-9]{2}|[a-fA-F0-9]{2})/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].length==2?'%'+c[i]:String.fromCharCode(parseInt(c[i],16))}console.log(c,r)})('D6D0CE0031003225C4')
原字符串 "a12%D6%D012%25%C4%D013abcdefed";[/quote] 转化后的应该是要这样子"006100310032D6D00031003225C4D00031003300610062006300640065006600650064";[/quote] 不过我后面自己也出来了一个正向转化的方法,感谢大佬
  • 打赏
  • 举报
回复
引用 1 楼 weixin_37226778 的回复:
你这没有转换规则啊
有啊,数字、字母转化成00+Ascii码
weixin_37226778 2021-04-20
  • 打赏
  • 举报
回复
你这没有转换规则啊
  • 打赏
  • 举报
回复
var str=“%D6%D0%CE12%25%C4” var strs='' for(var i=0;i<str.length;i++){if(str[i]!='%'){strs+=str[i]}}
  • 打赏
  • 举报
回复
引用 6 楼 苪玫儿呀 的回复:
[quote=引用 4 楼 文盲老顾 的回复:]


(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('%D6%D0%CE12%25%C4')

(function(s){var c=s.match(/(00[0-9]{2}|[a-fA-F0-9]{2})/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].length==2?'%'+c[i]:String.fromCharCode(parseInt(c[i],16))}console.log(c,r)})('D6D0CE0031003225C4')
原字符串 "a12%D6%D012%25%C4%D013abcdefed";[/quote] 转化后的应该是要这样子"006100310032D6D00031003225C4D00031003300610062006300640065006600650064";
  • 打赏
  • 举报
回复
引用 4 楼 文盲老顾 的回复:


(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('%D6%D0%CE12%25%C4')

(function(s){var c=s.match(/(00[0-9]{2}|[a-fA-F0-9]{2})/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].length==2?'%'+c[i]:String.fromCharCode(parseInt(c[i],16))}console.log(c,r)})('D6D0CE0031003225C4')
原字符串 "a12%D6%D012%25%C4%D013abcdefed";
  • 打赏
  • 举报
回复
引用 4 楼 文盲老顾 的回复:


(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('%D6%D0%CE12%25%C4')

(function(s){var c=s.match(/(00[0-9]{2}|[a-fA-F0-9]{2})/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].length==2?'%'+c[i]:String.fromCharCode(parseInt(c[i],16))}console.log(c,r)})('D6D0CE0031003225C4')
大佬,发现上边那个方法,不适用于这种情况呀
文盲老顾 2021-04-20
  • 打赏
  • 举报
回复


(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('%D6%D0%CE12%25%C4')

(function(s){var c=s.match(/(00[0-9]{2}|[a-fA-F0-9]{2})/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].length==2?'%'+c[i]:String.fromCharCode(parseInt(c[i],16))}console.log(c,r)})('D6D0CE0031003225C4')
求助网是web2.0系统,一问多人参与,评论,分享DIGG多种模式于一体系统,更多好的功能请站长们自己体会吧! 求助网第四回发布,增加一下功能,多谢各位朋友理解和支持! *本套系统主要是增加了,静态页功能,增加了SEO,所有问题都生成静态页面 1、字母长不换行的问题 2、搜索字母BUG 3、静态页面JS浏览量,实时更新 5、匿名可以回答问题 6、发布问题具有审核功能 7、首页增加了调用奖品 8、回答的问题具有支持和反对 9、弹出窗口,关闭刷父页面 10、JS可以调用任何类别、任何数量的问题 11、发布问题和回答增加验证码功能 12、发布和回答问题有编译器功能,可以引用图片,增加效果文字 13、完善邮件系统 14、增加了版主权限 15、会员个人信息默认头像不显示问题 安装方法:将程序传到空间即可 数据库路径:whelpu_d/help.mdb,下载后,请修改数据库路径 修改数据库路径:include/conn.asp 版权说明:本套系统版权归求助网(www.whelpu.com)所有,任何人都可以使用以及修改开源版本,但是不允许复制给第三人(或者出售)、一旦发现将追究版权问题 更多功能请咨询商业版本 调测安装说明:进入后台必须要在前台先登陆,之后点进入管理中心进入后台。 用户名:求助网 密码:123123 如果在使用过程中,发现问题和疑问请和客服联系:QQ:359000335

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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