我的应用程序具有16个十六进制字符的限制输入,以表示8个ASCII字符。我唯一需要的字符是A-Z和0-9。我不需要小写字母或任何非标准的字母数字字符。 2个字符的十六进制可以表示键盘上的所有字符,但我不需要全部。
是否有某种类型的库可以压缩字母数字字符串以使其适合16个十六进制字符?
示例:
12345678 = 31 32 33 34 35 36 37 38
我希望能够使用更多这样的字母数字字符进行打包:
ABCDEFGHI12345678 = 31 32 33 34 35 36 37 38
是否有这样做的图书馆?
经过一些实验,这是我的压缩算法。
可以接收包含A-Z和0-9的6个字符的消息,并将其转换为8个十六进制字符。
它可以被使用两次,以12个字符的字符串压缩为16个十六进制字符。
我希望它对您的应用程序有用。
const testMessage = '6CHARS';
function charToInt(char, shift) {
let charCode = char.charCodeAt(0) - 48;
if (charCode > 9) {
charCode -= 7;
}
charCode *= 36 ** shift;
return charCode;
}
function intToChar(int, shift) {
let number = int / (36 ** shift);
if (number > 9) {
number += 7;
}
number += 48;
return String.fromCharCode(number);
}
function stringToInt(stringWithSixCharacters) {
let result = 0;
for (let index = 0; index < 6; index++) {
result += charToInt(stringWithSixCharacters.charAt(index), 5 - index);
}
return result;
}
function intToString(intFromSixCharacters) {
let number = intFromSixCharacters;
let result = '';
for (let index = 0; index < 6; index++) {
const mod = number % (36 ** (index + 1));
const char = intToChar(mod, index);
result = char + result;
number = number - mod;
}
return result;
}
function intToHex(int) {
return int.toString(16).padStart(8, '0').toUpperCase();
}
function hexToInt(hex) {
return parseInt(messageHex, 16);
}
console.log('testMessage:', testMessage);
const messageCode = stringToInt(testMessage);
const messageHex = intToHex(messageCode);
console.log('messageCode:', messageCode);
console.log('hex:', messageHex);
const extractedMessageCode = hexToInt(messageHex);
const extractedMessage = intToString(extractedMessageCode);
console.log('extractedMessageCode:', extractedMessageCode);
console.log('extractedMessage:', extractedMessage);