JS算法求助

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

并且要求能互相反转!!!!
JS渣渣一枚,在线求助大佬!!!!
...全文
257 12 打赏 收藏 转发到动态 举报
写回复
用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')

87,922

社区成员

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

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