gpt4 book ai didi

javascript - 压缩字母数字字符,限制为 8 个字节的十六进制字符

转载 作者:行者123 更新时间:2023-12-02 22:05:17 31 4
gpt4 key购买 nike

我的应用程序的输入限制为 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 个十六进制字符。

如果我的数学正确,这是您可以实现的最佳压缩,因为 16^16 几乎等于 36^(12.38),这意味着您最多可以将 36 个字符集(A-Z、0-9)中的 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); // prints '16DFB4C8'
const extractedMessageCode = hexToInt(messageHex);
const extractedMessage = intToString(extractedMessageCode);
console.log('extractedMessageCode:', extractedMessageCode);
console.log('extractedMessage:', extractedMessage); // prints '6CHARS'

关于javascript - 压缩字母数字字符,限制为 8 个字节的十六进制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59739522/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com