如何解决将十进制 ASCII 码字符串解码为字符串
我有一个问题,我有一个十进制ascii代码'729799107101114328297110107'
的字符串,我需要对其进行解码(2或3位数字之间),例如字母'a'是数字97 ascii,所以它将是该字符串的第二个字母,而 'k' 是 107,即字符串中的第四个字母。
但我不知道如何“分离”整个字符串以删除相应的 ascii 数字。
有一个网站已经这样做了,但是,我需要在 javascript
解决方法
我们可以使用类似reduce的方法,遍历字符串并在找到时附加每个有效字符:
function encodeDecimalString(input) {
return Array.prototype.reduce.call(input,(acc,c) => acc + c.charCodeAt(0),"")
}
function decodeDecimalString(input) {
const minCharValue = 32;
const { decoded } = Array.prototype.reduce.call(input,e) => {
acc.state += e;
if (+acc.state >= minCharValue) {
acc.decoded += String.fromCharCode(+acc.state);
acc.state = "";
}
return acc;
},{ decoded: "",state: "" });
return decoded;
}
const str = '729799107101114328297110107';
console.log("Decoded value:",decodeDecimalString(str));
const testStr2 = "Another example";
console.log("Original string 2:",testStr2);
const testStr2Encoded = encodeDecimalString(testStr2);
console.log("Original string 2,encoded:",testStr2Encoded);
console.log("Original string 2,decoded:",decodeDecimalString(testStr2Encoded));
首先从 ascii 代码中获取字符很容易,javascript 有一个方法 String.fromCharCode(charCode)
可以将字符代码转换为字符串。
let str = "729799107101114328297110107";
const tester = str.split('');
let currentChar = '';
let result = "";
const minVal = 25;
const maxval = 255;
for (let i = 0; i < tester.length; i++) {
currentChar += tester[i];
if (parseInt(currentChar) > minVal) {
console.log(currentChar,String.fromCharCode(currentChar));
result += String.fromCharCode(currentChar);
currentChar = "";
}
if (parseInt(currentChar) > maxval) {
currentChar = '';
console.log('above ' + maxval + ' clearing',currentChar);
}
}
console.log(result);
正如我在评论中提到的,如果您使用 0-255 的完整范围(除非十进制值填充零),则解析十进制 ascii 值是不确定的。如果要解析 2-3 位十进制 ascii 值,如果限制可能值的范围,则可以使过程具有确定性。幸运的是,标准的可打印 ASCII 字符以十进制 127 结尾,因此您可以使用以下函数来解析 2-3 位 ASCII 十进制字符串并返回可打印值。注意:本示例中支持的值范围为 20-199(含)。
function parse_ascii_decimal(input) {
var index = 0;
var max_len = input.length;
var ordinal = 0;
var min_ascii_val = 20;
var ascii_str = "";
while (index < max_len) {
var tmpstr = input.substr(index,2);
var ordinal = parseInt(tmpstr);
if (ordinal < min_ascii_val) {
tmpstr = input.substr(index,3);
ordinal = parseInt(tmpstr);
index++;
}
ascii_str += String.fromCharCode(ordinal);
index += 2;
}
console.log(ascii_str);
return ascii_str;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。