0
我有一個256字符長的字符串我用作位域,我想用JavaScript縮小,因此我可以將它用作url中查詢字符串的一部分。我不確定最佳/最有效的方法是什麼。在查詢字符串中使用的位域
我想我想要類似於這個解決方案的東西,Create a large bitfield,但是我的位域只有1和0。
任何想法?
我有一個256字符長的字符串我用作位域,我想用JavaScript縮小,因此我可以將它用作url中查詢字符串的一部分。我不確定最佳/最有效的方法是什麼。在查詢字符串中使用的位域
我想我想要類似於這個解決方案的東西,Create a large bitfield,但是我的位域只有1和0。
任何想法?
所以這就是我想出的。我的位域保存在一個數組中。如果我把數組分成16個小塊,我可以做到以下幾點。
var bitArray = [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
console.log('Original array', bitArray);
// Logs "Original array [ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]"
var stringToArray = function (str) {
var arr = [];
for (var i = 0; i < str.length; i++) {
arr.push(parseInt(str[i], 10));
}
return arr;
};
var addPadding = function (str, maxLength) {
for (var i = 0; i < maxLength - str.length; i++) {
str = '0' + str;
}
return str;
};
var shrink = function (str) {
str = parseInt(str, 10);
str = str.toString(36);
return str;
};
var expand = function (str) {
str = parseInt(str, 36) + '';
return str;
};
var qs = bitArray.join('');
qs = shrink(qs);
console.log('Shrunk value', qs);
// Logs "Shrunk value 3xsdgob0n"
// 10 characters is the maximum length of base36 string when converted.
qs = addPadding(qs, 10);
qs = addPadding(expand(qs), bitArray.length);
console.log('Re-expanded array', stringToArray(qs));
// Logs "Re-expanded array [ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]"
你考慮過Base64編碼了嗎?在你發佈的鏈接中,他們使用的是base-36。 – Halcyon
@FritsvanCampen這將使它更長,不會更短! – Barmar
@Barmar不是他的輸入是位而不是字符。一個基本的64位字符表示6位。所以你會得到一個43個字符的字符串。 – Halcyon