Core points
This article will introduce a simple and flexible arbitrary character set counting technique. While this technique is not often required, when needed, you will find that JavaScript's built-in functions cannot handle it completely. JavaScript does have built-in functions for parsing and converting numbers between different numerical cardinalities. For example, the parseInt
method can handle any cardinality (numerical cardinality) from 2 to 36, and is usually used for numeric conversion and counting of non-decimal cardinality. Number.toString
Method can reverse conversion, convert decimal numbers back to non-decimal numeric string:
var character = "2F"; alert(parseInt(character, 16)); // 弹出 47 var number = 47; alert(number.toString(16)); // 弹出 "2F"
But what if you want to count using Klingon numbers? Or more likely, use Greek or Cyrillic letters, hieroglyphs, or some kind of rune? The technique I will demonstrate can do this with precision, in any numerical cardinality; to illustrate this fully, I will show you some examples of capital Greek letters using hexadecimal (hexadecimal).
Glossary is crucial
First, we need to define a vocabulary, the dictionary of the characters we will use, defined as a single string of Unicode escape sequences. In this case, we have 16 capital Greek letters, from Alpha to Pi – each number is represented by a letter, and the length of the entire string determines the numerical base:
var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
Escape sequence is a character
It is worth noting that even if it takes six typing characters to define a Unicode escape sequence, it still appears as only one character in the string, so the vocabulary length is 16 characters. Once we have a vocabulary, we can use String.charAt
to quote characters by number index, and vice versa, we can use String.indexOf
to get the numeric index of characters:
var character = "2F"; alert(parseInt(character, 16)); // 弹出 47 var number = 47; alert(number.toString(16)); // 弹出 "2F"
Therefore, any calculations we perform will be based on both methods. For example, let's define a loop, run "Κ" iterations, and list each character in between:
var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
But what about larger numbers, such as character equivalents that show 23? We just need to extract the individual numbers and then get the character equivalent, in this case 2 and 3:
var number = lexicon.indexOf("u0398"); // "Θ" 的十进制等价物 var character = lexicon.charAt(7); // 7 的字符等价物
To make things more interesting, what if the number we are converting contains letters and numbers, such as the hexadecimal number "2F"? In this case we have to convert each number separately because we cannot refer to the characters by hexadecimal index (i.e. lexicon.charAt("F")
must become lexicon.charAt(15)
):
var str = ""; for(var i=0; i<lexicon.indexOf("u039a"); i++) { str += lexicon.charAt(i); } alert(str);
Of course, the last two examples are quite simple, because the number of digits of the number is known; however, it is not difficult to adjust the process to iterate over any number of digits contained in the number. All the components you need are provided here, just adjust them to your specific requirements.
Data is crucial!
It happens that you can count using normal Latin numbers and letters in the exact same way if you want. The scalability of the glossary means you can use it to extend the native capabilities of JavaScript to a cardinality greater than 36 and use any symbol that looks appropriate at the time.
Or just develop some stylish clocks!
Want to know more?
If you want to read more from James, subscribe to our weekly Tech Times newsletter Tech Times.
FAQs about any character set (FAQ)
(The FAQ part provided in the original text should be included here, and due to length reasons, it is omitted here)
The above is the detailed content of Counting with an Arbitrary Character Set. For more information, please follow other related articles on the PHP Chinese website!