我需要一些建议来使用charCodeAt()方法。
我的代码如下:
doParity() {
var str = ["abcd", "efgh", "ijkl"];
var arr = str[0][0] + str[1][0] + str[2][0]; // arr = "aei"
var bin = [];
var par = [];
var parity;
var result = [];
// line 8
for (let j = 0; j < 3; j++) {
bin[j] = this.toBin(str[j][0]); // bin[j] is 8bit binary number
par[j] = bin[j][0]; // when j=0, str[j][0] = 'a',
// bin[j] = 01100001,
// par[j] = 0
if (j == 0) parity = par[j] ^ par[j + 1];
else parity ^= parity[j + 1];
alert(parity);
}
//line 18
//for (let i = 0; i < 8; i++) {
// for (let j = 0; j < 3; j++) {
// bin[j] = this.toBin(str[j][i]);
// par[j] = bin[j][i];
// if (j == 0) parity = par[j] ^ par[j + 1];
// else parity ^= parity[j + 1];
// }
// result[i] = parity;
//}
//alert(result);
}
toBin(str) { // This function get ASCII value and return 8bit binary number of it.
var st, i, j, d;
var arr = [];
var len = str.length;
for (i = 1; i <= len; i++) {
//reverse so its like a stack
d = str.charCodeAt(len - i);
for (j = 0; j < 8; j++) {
arr.push(d % 2);
d = Math.floor(d / 2);
}
}
//reverse all bits again.
return arr.reverse().join("");
}
Line8的for循环运行良好,然后我编写了Line18的循环,因为我需要得到8位xor变量,但它不起作用。
它给了我。
这段代码很简单,但我还在徘徊。
任何帮助都将不胜感激。
答案 0 :(得分:1)
for (let i = 0; i < 8; i++) {
for (let j = 0; j < 3; j++) {
bin[j] = this.toBin(str[j][i]);
从你的循环j
上升到7
但str
中的所有字符串都是4个字符长。 str[0][7]
未定义。
var str = ["abcd", "efgh", "ijkl"];
console.log(str[0][0]);
console.log(str[0][7]);
&#13;
答案 1 :(得分:0)
str[j][0]
返回undefined
,因为str
不是二维数组
从阵列中删除第二次访问[0]
。
function doParity() {
var str = ["abcd", "efgh", "ijkl"];
var arr = str[0] + str[1] + str[2]; // arr = "aei"
var bin = [];
var par = [];
var parity;
var result = [];
// line 8
for (let j = 0; j < 3; j++) {
bin[j] = this.toBin(str[j]); // bin[j] is 8bit binary number
par[j] = bin[j]; // when j=0, str[j][0] = 'a',
// bin[j] = 01100001,
// par[j] = 0
if (j == 0) parity = par[j] ^ par[j + 1];
else parity ^= parity[j + 1];
alert(parity);
}
//line 18
//for (let i = 0; i < 8; i++) {
// for (let j = 0; j < 3; j++) {
// bin[j] = this.toBin(str[j][i]);
// par[j] = bin[j][i];
// if (j == 0) parity = par[j] ^ par[j + 1];
// else parity ^= parity[j + 1];
// }
// result[i] = parity;
//}
//alert(result);
}
function toBin(str) { // This function get ASCII value and return 8bit binary number of it.
var st, i, j, d;
var arr = [];
var len = str.length;
for (i = 1; i <= len; i++) {
//reverse so its like a stack
d = str.charCodeAt(len - i);
for (j = 0; j < 8; j++) {
arr.push(d % 2);
d = Math.floor(d / 2);
}
}
//reverse all bits again.
return arr.reverse().join("");
}
doParity();
&#13;
答案 2 :(得分:0)
关于str [j] [0]错误的答案,因为str不是2d数组是半错误的。虽然它是一个字符串的1d数组,如果你对字符串执行[index],你将获得该索引处的char,因此str [j] [0]不会返回undefined,因此你可以对它执行.length(虽然它总是1):它返回第j个字符串的第一个字符。我运行了你编写的代码并且它可以运行&#34;很好&#34;对我来说:我收到了3个提醒,其中包括&#39; 0&#39;作为消息。因此,尽管您的方法逻辑存在缺陷,但代码应该可以正常运行。