Maison >interface Web >js tutoriel >Compter avec un jeu de caractères arbitraire

Compter avec un jeu de caractères arbitraire

Christopher Nolan
Christopher Nolanoriginal
2025-03-04 01:11:08530parcourir

Counting with an Arbitrary Character Set

Points de base

  • L'utilisation du comptage de jeux de caractères arbitraires dans JavaScript nécessite la création d'un vocabulaire, c'est-à-dire un dictionnaire de caractères défini comme une chaîne de séquence d'échappement Unicode. Chaque caractère du jeu de caractères se voit attribuer une valeur unique, et le processus de comptage traverse l'ensemble du jeu de caractères et remonte au début lorsqu'il atteint la fin.
  • En JavaScript, des fonctions intégrées qui analysent et convertissent les nombres entre différentes cardinalités numériques peuvent être étendues pour traiter des jeux de caractères arbitraires. Cela permet de compter dans la cardinalité non décimale et de convertir des nombres décimaux en chaînes numériques non décimales, même avec des caractères inhabituels tels que des lettres grecques ou cyrilliques, des hiéroglyphes ou des runes.
  • Le concept d'utilisation du comptage de jeux de caractères arbitraires a un large éventail d'applications, en particulier dans les domaines de l'informatique et de la cryptographie. Il permet un grand nombre de combinaisons possibles, ce qui le rend idéal pour créer des identifiants uniques, des clés de chiffrement et des mots de passe sécurisés. Plus le jeu de caractères est grand, plus la chaîne est longue, plus il y a de combinaisons potentielles et plus elle est de sécurité.

Cet article introduira une technique de comptage de jeux de caractères arbitraires simples et flexibles. Bien que cette technique ne soit pas souvent nécessaire, en cas de besoin, vous constaterez que les fonctions intégrées de JavaScript ne peuvent pas le gérer complètement. JavaScript a des fonctions intégrées pour l'analyse et la conversion des nombres entre différentes cardinalités numériques. Par exemple, la méthode parseInt peut gérer n'importe quelle cardinalité (cardinalité numérique) de 2 à 36, et est généralement utilisée pour la conversion numérique et le comptage de la cardinalité non décimale. Number.toString La méthode peut inverser la conversion, convertir les nombres décimaux en chaîne numérique non décimale:

var character = "2F";
alert(parseInt(character, 16));    // 弹出 47

var number = 47;
alert(number.toString(16));        // 弹出 "2F"

Mais que se passe-t-il si vous voulez compter en utilisant des numéros de Klingon? Ou plus probablement, utilisez des lettres grecques ou cyrilliques, des hiéroglyphes ou une sorte de rune? La technique que je vais démontrer peut le faire avec précision, dans toute cardinalité numérique;

Le glossaire est crucial

Tout d'abord, nous devons définir un vocabulaire, le dictionnaire des caractères que nous utiliserons, définis comme une seule chaîne de séquences d'échappement Unicode. Dans ce cas, nous avons 16 lettres grecques de capital, d'Alpha à Pi - chaque numéro est représenté par une lettre, et la longueur de la chaîne entière détermine la base numérique:

var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";

La séquence d'échappement est un caractère

Il convient de noter que même s'il faut six caractères de frappe pour définir une séquence d'échappement Unicode, il apparaît toujours comme un seul caractère dans la chaîne, donc la longueur de vocabulaire est de 16 caractères. Une fois que nous avons un vocabulaire, nous pouvons utiliser String.charAt pour citer les caractères par index de nombre, et vice versa, nous pouvons utiliser String.indexOf pour obtenir l'index numérique des caractères:

var character = "2F";
alert(parseInt(character, 16));    // 弹出 47

var number = 47;
alert(number.toString(16));        // 弹出 "2F"

Par conséquent, tous les calculs que nous effectuons seront basés sur les deux méthodes. Par exemple, définissons une boucle, exécutons les itérations "κ" et énumons chaque caractère entre:

var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";

Mais qu'en est-il des plus grands nombres, tels que des équivalents de personnages qui montrent 23? Nous avons juste besoin d'extraire les nombres individuels, puis d'obtenir le personnage équivalent, dans ce cas 2 et 3:

var number = lexicon.indexOf("u0398");    // "Θ" 的十进制等价物

var character = lexicon.charAt(7);         // 7 的字符等价物

pour rendre les choses plus intéressantes, que se passe-t-elle si le nombre que nous convertissons contient des lettres et des nombres, comme le numéro hexadécimal "2f"? Dans ce cas, nous devons convertir chaque numéro séparément parce que nous ne pouvons pas nous référer aux caractères par index hexadécimal (c'est-à-dire que lexicon.charAt("F") devons devenir lexicon.charAt(15)):

var str = "";
for(var i=0; i<lexicon.indexOf("u039a"); i++) {
    str += lexicon.charAt(i);
}
alert(str);

Bien sûr, les deux derniers exemples sont assez simples, car le nombre de chiffres du nombre est connu cependant; Tous les composants dont vous avez besoin sont fournis ici, ajustez-les simplement à vos besoins spécifiques.

Les données sont cruciales!

Il arrive que vous puissiez compter en utilisant des nombres et des lettres latins normaux de la même manière si vous le souhaitez. L'évolutivité du glossaire signifie que vous pouvez l'utiliser pour étendre les capacités natives de JavaScript à une cardinalité supérieure à 36 et utiliser tout symbole qui semble approprié à l'époque.

ou développez simplement des horloges élégantes!

Vous voulez en savoir plus?

Si vous voulez en savoir plus sur James, abonnez-vous à notre Weekly Tech Times Newsletter Tech Times.

FAQ sur n'importe quel jeu de caractères (FAQ)

(La partie FAQ fournie dans le texte d'origine doit être incluse ici, et pour des raisons de longueur, elle est omise ici)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn