我是一名帮助翻译的助手。
我有一个数组,每个单元格都可以保存4个字节(2 ** 32)。这个数组表示我在JS中编写的VM的内存。此外,我有一个字符串。只有一个地方可以保存这个字符串 - 我上面描述的内存。
我决定将字符串呈现为C-字符串(以特殊符号NUL作为字符串结尾)。我的当前实现看起来很丑陋,并询问您是否有任何改进此方法的建议?也许还有其他方法可以做到这一点?
以下是将字符串转换为数组的代码的一部分:
我有一个数组,每个单元格都可以保存4个字节(2 ** 32)。这个数组表示我在JS中编写的VM的内存。此外,我有一个字符串。只有一个地方可以保存这个字符串 - 我上面描述的内存。
我决定将字符串呈现为C-字符串(以特殊符号NUL作为字符串结尾)。我的当前实现看起来很丑陋,并询问您是否有任何改进此方法的建议?也许还有其他方法可以做到这一点?
以下是将字符串转换为数组的代码的一部分:
// demoMemory presents memory model
var DEMO_VOLUME = 16;
var demoMemory = new Array(DEMO_VOLUME);
for (var i = 0; i < DEMO_VOLUME; i++) demoMemory[i] = 0;
// convert string to hexidecimal string
var string = "Hello, World!", hexString = "";
for (var i = 0; i < string.length; i++) {
hexString += string.charCodeAt(i).toString(16);
}
// convert hexidecimal string to array of strings
// each element of this array presents 4 symbols
var hexStringArray = hexString.match(/.{1,8}/g);
// add NUL (0x00) symbols to complete strings
while (hexStringArray[hexStringArray.length - 1].length != 8) {
hexStringArray[hexStringArray.length - 1] += "00";
}
// convert to integer array
for (var i = 0; i < hexStringArray.length; i++) {
demoMemory[i] = parseInt(hexStringArray[i], 16);
}
...并转换回字符串:
// decode back to string
var resultString = "", decSymbolCode = 0;
for (var i = 0; i < demoMemory.length; i++) {
hexString = demoMemory[i].toString(16);
var hexSymbolCodeArray = hexString.match(/.{1,2}/g);
for (var j = 0; j < hexSymbolCodeArray.length; j++) {
decSymbolCode = parseInt(hexSymbolCodeArray[j], 16);
resultString += String.fromCharCode(decSymbolCode);
}
}
这段代码很难理解,因为我使用JS字符串来构建十六进制字符串。我认为可能可以使用位运算和掩码来实现,但我不知道怎么做。也许我错了。