Javascript 凯撒密码只有第一个值是正确的

Javascript 凯撒密码只有第一个值是正确的,javascript,encryption,fromcharcode,Javascript,Encryption,Fromcharcode,我的caesar密码只适用于第一个字母,我尝试过使用嵌套for循环移动变量,但似乎无法理解免费比萨饼应该翻译成SERR CVMMN,但它给了我一堆奇怪的符号和小写翻译 function rot13(str) { // LBH QVQ VG! let x = str; let y = []; let n = '' for(let i = 0; i < x.length; i++) { y.push(x.charCodeAt(i) + 13) console.log(x.c

我的caesar密码只适用于第一个字母,我尝试过使用嵌套for循环移动变量,但似乎无法理解<代码>免费比萨饼应该翻译成
SERR CVMMN
,但它给了我一堆奇怪的符号和小写翻译

function rot13(str) { // LBH QVQ VG!
let x = str;
let y = [];
let n = ''
for(let i = 0; i < x.length; i++) {

    y.push(x.charCodeAt(i) + 13)

    console.log(x.charCodeAt(i))

}
console.log(y)

for(let j = 0; j < y.length; j++){
  console.log(y[j])
 n += String.fromCharCode(y[j])
}
console.log(n)

  return n;
}
函数rot13(str){//LBH QVQ VG!
设x=str;
设y=[];
设n=''
for(设i=0;i
当您使用
charCode
时,您将获得字符的unicode值,对于大写英文字母,其范围为65–90。当您添加13时,将获得字符“nopqrstuvxyz[]^ `abcdefg”的unicode值,这不是您想要的

您需要找到一种方法,使英文字符只映射到13步之外的英文字符,并将其环绕,以便后面的字符映射到前面的字符(以便Z映射到M)

如果您放弃使用unicode值,而不是使用自己的字母表,这可能更容易实现,如下面的代码段所示:

函数rot13(str){
设x=str.toUpperCase();
设y=[];
让n=”“;
让字母表=“abcdefghijklmnopqrstuvxyz”;
for(设i=0;i-1){
n+=字母字符((x.charAt(i))的字母索引+13)%26);
}否则{
n+=x.charAt(i);
}
}
返回n;
}

控制台日志(rot13(“免费比萨饼”)
当您使用
charCode
时,您将获得字符的unicode值,对于大写英文字母,其范围为65–90。当您添加13时,将获得字符“nopqrstuvxyz[]^ `abcdefg”的unicode值,这不是您想要的

您需要找到一种方法,使英文字符只映射到13步之外的英文字符,并将其环绕,以便后面的字符映射到前面的字符(以便Z映射到M)

如果您放弃使用unicode值,而不是使用自己的字母表,这可能更容易实现,如下面的代码段所示:

函数rot13(str){
设x=str.toUpperCase();
设y=[];
让n=”“;
让字母表=“abcdefghijklmnopqrstuvxyz”;
for(设i=0;i-1){
n+=字母字符((x.charAt(i))的字母索引+13)%26);
}否则{
n+=x.charAt(i);
}
}
返回n;
}

控制台日志(rot13(“免费比萨饼”)
charCode并不是你想要它做的事情——它不仅仅是字母表中的字母。我可能只是制作一个数组,包含字母表中的每个字母。@IrkenInvader,你是说charCodeAt()+13,返回较高字母的符号(例如,为什么F翻译得很好,而R给我一个-)?是的,这里有一个列表,这样你可以看到数学是如何计算出
String.fromCharCode((c.charCodeAt()-65+13)%26+65)
在使用单个大写字母变量
c进行测试时对我有效。可能会有帮助。只要我理解我在用charCodeAt和fromCharCode函数做什么,我就行了。我讨厌这些练习假设我知道math.charCode没有做你想做的事情——它不仅仅是字母表中的字母。我可能只是制作一个数组,包含字母表中的每个字母。@IrkenInvader,你是说charCodeAt()+13,返回较高字母的符号(例如,为什么F翻译得很好,而R给我一个-)?是的,这里有一个列表,这样你可以看到数学是如何计算出
String.fromCharCode((c.charCodeAt()-65+13)%26+65)
在使用单个大写字母变量
c进行测试时对我有效。可能会有帮助。只要我理解我在用charCodeAt和fromCharCode函数做什么,我就行了。我讨厌这些练习假定我懂数学。%26到底做什么?Sry,自学,还有很多空白需要填补,自由代码营漏掉了哈哈。这是,它使字符代码环绕(晚期字符映射到早期字符)。谢谢,我想我可能必须比计划的更早一点复习我的数学技能哈哈!%26的具体用途是什么?Sry,自学,还有很多空白需要填补,自由代码营漏掉了哈哈。这是,它使字符代码环绕(晚期字符映射到早期字符)。谢谢,我想我可能必须比计划的更早一点复习我的数学技能哈哈!