我正在尝试操作给定字母串(所有大写字母)的ASCII码。在下面的示例中,我将ASCII代码递增1并将其输出到#newText
。
<h2 id="text">ABCXYZ</h2>
<h2 id="newText">placeholder</h2>
var text = document.getElementById("text").firstChild.nodeValue;
var newText = "";
for (i=0; i < text.length; i++){
newText = newText + String.fromCharCode(text.charCodeAt(i)+1);
}
document.getElementById("newText").firstChild.nodeValue = newText;
JSFiddle:http://jsfiddle.net/KatieK/gg9Hx/19/
问题是Z被改为[。 (这是有道理的,因为A-Z的ASCII范围是65-90,而[的ASCII值是91.)相反,我希望Z转换为A.
我已经尝试过模数来获取ASCII值,但是我对非0范围的ASCII值有困难。
如果x = 91;
,则console.log(((x-65)%26)+65);
会产生65,这很好。但是如果x = 64;
那么相同的公式会导致64,当我希望它为90时。
在递增和调制大写字母的ASCII值时,如何计算大写字母的ASCII值的非零范围?在这个例子中,我想把91变成65,92变成66,93变成67,64变成90,63变成89,62变成88作为例子。
答案 0 :(得分:2)
您可以使用另一个x
填充26
来处理65以下的值。
console.log(((x+26-65)%26)+65);
如果您需要更多填充,只需添加26的其他倍数。
答案 1 :(得分:1)
嗯,A-Z
是26个字符,所以你的算术模26也是如此。然后将结果(0 ... 25)编码为所需的字符范围,在这种情况下就像添加65一样简单。
与解码类似,首先从字符范围转换为数字,然后应用算术。
答案 2 :(得分:1)
您需要一个条件来查看该数字是否低于65或高于90,然后与您目前为数字超过90的数字做相反的事情
var x = text.charCodeAt(i)+1;
x = x > 90 ? ((x-65)%26)+65 : x < 65 ? (((x+65)%26)+65) : x;
newText = newText + String.fromCharCode(x);
要使其适用于任何数字,请使用
x = x > 90 ? x-(Math.ceil((x-90)/26)*26) : x < 65 ? x+(Math.ceil((65-x)/26)*26) : x;
答案 3 :(得分:-1)
您拥有解决方案的第一部分console.log(((x-65)%26)+65);
。正如您所注意到的,它在某些情况下有效,但在其他情因此,在其工作的情况下使用它,并在其他情况下使用其他东西。只需编写符合您需要的代码即可。