3
我有一個數組,每個數據單元可以保留4個字節(2 ** 32)。這個數組展示了我用JS編寫的虛擬機的內存。我也有字符串。只有一個地方我可以保留這個字符串 - 我上面描述的內存。在JavaScript中將字符串轉換爲整數數組,反之亦然
我決定在內存中以字符串的形式呈現字符串(特殊符號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字符串構建十六進制字符串。我認爲可以用位操作和麪具來做,但我不知道,如何。也許我錯了。
真棒,正是我所想!謝謝。 – bsiamionau 2013-04-05 12:14:46