La conversion d'une valeur d'une base ou d'une base à une autre est souvent nécessaire avec des données dans des formats externes tels que des données de capteur ou de réseau. JMP a pris en charge la conversion de l'hexadécimal en décimal et inversement en utilisant le Hex et Hex en nombre les fonctions. Par exemple:
decimalToHex = Hex(1234, “integer”);
show(decimalToHex);
backToDecimal = HexToNumber(decimalToHex);
show(backToDecimal);
Sortir:
decimalToHex = "000004D2";
backToDecimal = 1234;
Mais que se passe-t-il si vous disposez de données binaires ou octales ?
Ce n'est plus seulement un sortilège
Avec JMP15 , ces fonctions ont été étendues pour prendre en charge n'importe quelle base de 2 à 36. En précisant le Base option sur le Hex fonction, le nombre décimal sera converti dans cette base plutôt que dans la base par défaut de 16.
decimalToBinary = Hex(1234, Base(2));
show(decimalToBinary);
decimalToOctal = Hex(1234, Base(8));
show(decimalToOctal);
Sortir:
decimalToBinary = "10011010010";
decimalToOctal = “2322”
Souvent, avec des données binaires, vous souhaitez que les valeurs soient complétées jusqu'aux limites d'octets pour des raisons de cohérence. Le nouveau Pad vers l'option permet cela.
Rembourré à 2 octets :
Hex(1234, Base(2), Pad To(16));
"0000010011010010"
Rembourré à 4 octets :
Hex(1234, Base(2), Pad To(32));
"00000000000000000000010011010010"
Hex à numéro fournit la fonctionnalité inverse lorsque le Base l’option est spécifiée.
Convertir du binaire en décimal :
binaryToDec = Hex To Number("10011010010", Base(2));
show(binaryToDec);
octalToDec = Hex To Number("2322", Base(8));
show(octalToDec);
Sortir:
binaryToDec = 1234;
octalToDec = 1234;
Codes QR
Les codes QR (Quick Response codes) sont des codes à barres bidimensionnels qui stockent de petites quantités de données binaires pouvant être lues à l'aide d'un scanner ou d'un smartphone. Ces codes ont été développés pour le suivi des stocks, mais ils sont désormais souvent utilisés pour coder les données de localisation des sites Web ou des applications. Par exemple, voici un code QR pour le JMP Discovery Summit à Tucson qui renvoie vers la page Web principale de la conférence.
QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019Code QR pour le Sommet Découverte Tucson 2019
Le code QR se compose de plusieurs modèles fixes (tels que les trois grands blocs carrés pour l'alignement) et de la zone de cellule/contenu pour les données ainsi que des informations de détection/correction des erreurs. Les codes QR sont disponibles dans différentes tailles et comportent différents niveaux de correction d'erreur. Ces détails ne sont pas importants pour cet exercice.
Imaginons que vous souhaitiez encoder l'URL de Sommet Découverte Tucson 2019 dans les bits nécessaires pour un code QR.
Nous pouvons commencer par l'URL :
https://discoverysummit.jmp/en/2019/usa/home.html
Les codes QR prennent en charge quatre types d'encodage : numérique, alphanumérique, octet et Kanji. Puisque notre URL est une combinaison de lettres, de chiffres et de symboles, nous pouvons utiliser le codage alphanumérique. Le codage alphanumérique ne prend en charge que les lettres majuscules, mais ce n'est pas grave puisque l'URL ne respecte pas la casse.
Malheureusement, les codages QR des caractères ne sont pas uniquement des valeurs ASCII. Si c'était le cas, nous pourrions simplement utiliser le Hex fonction pour obtenir l’encodage. Au lieu de cela, nous écrirons une courte fonction JSL pour effectuer la conversion basée sur le tableau ci-dessous.
Lettre
|
Code
|
ASCII
|
Lettre
|
Code
|
ASCII
|
Lettre
|
Code
|
ASCII
|
|---|
0
|
0
|
48
|
F
|
15
|
70
|
U
|
30
|
85
|
1
|
1
|
49
|
g
|
16
|
71
|
V
|
31
|
86
|
2
|
2
|
50
|
H
|
17
|
72
|
W
|
32
|
87
|
3
|
3
|
51
|
je
|
18
|
73
|
X
|
33
|
88
|
4
|
4
|
52
|
J.
|
19
|
74
|
Oui
|
34
|
89
|
5
|
5
|
53
|
K
|
20
|
75
|
Z
|
35
|
90
|
6
|
6
|
54
|
L
|
21
|
76
|
Espace
|
36
|
32
|
7
|
7
|
55
|
M
|
22
|
77
|
$
|
37
|
36
|
8
|
8
|
56
|
N
|
23
|
78
|
%
|
38
|
37
|
9
|
9
|
57
|
Ô
|
24
|
79
|
*
|
39
|
42
|
UN
|
dix
|
65
|
P.
|
25
|
80
|
+
|
40
|
43
|
B
|
11
|
66
|
Q
|
26
|
81
|
-
|
41
|
45
|
C
|
12
|
67
|
R.
|
27
|
82
|
.
|
42
|
46
|
D
|
13
|
68
|
S
|
28
|
83
|
/
|
43
|
47
|
E
|
14
|
69
|
T
|
29
|
84
|
:
|
44
|
58
|
Voici la fonction JSL pour effectuer la conversion d'un caractère en valeur codée alphanumérique.
encodeAlpha = Function( {ch},
// Convert character to its ASCII number value.
hexVal = Hex To Number(Hex(ch));
// Map the ASCII value to the QR encoded value.
If(hexVal >= 48 & hexVal <= 57, hexVal - 48, // 0-9
hexVal >= 65 & hexVal <= 90, hexVal - 55, // A-Z
hexVal >= 97 & hexVal <= 122, hexVal - 87,// a-z
hexVal == 32, 36, //Space
hexVal >= 36 & hexVal <= 37, hexVal + 1, // $ %
hexVal >= 42 & hexVal <= 43, hexVal - 3, // * +
hexVal >= 45 & hexVal <= 47, hexVal - 4, // - . /
hexVal == 58, 44, // :
0;
);
);
Le Si L'instruction mappe la valeur ASCII à la valeur codée à l'aide de plages. Par exemple, les caractères 0 à 9 sont ASCII 48 à 57 et sont codés de 0 à 9. Par conséquent, ceux-ci peuvent être transformés à partir de l’ASCII en soustrayant simplement 48. Il existe des plages similaires pour AZ et az. Les az minuscules sont mappés aux valeurs de l’AZ majuscule. Les symboles sautent, la plupart sont donc traités individuellement.
Pour économiser de l'espace, le code QR n'écrit pas directement la valeur codée. Il divise la chaîne en paires de caractères. Pour notre URL, cela ressemblerait à ceci :
ht tp s : // di sc over ys um mi t. jm p/ fr /2 01 9/ us a/ ho me .h tm l
Pour chaque paire de caractères, la valeur codée du premier caractère est multipliée par 45 et ajoutée à la valeur codée du deuxième caractère.
Notre première paire est 'ht' :
H = 17
T = 29
Le résultat serait 17 * 45 + 29 = 794. Ceci est ensuite converti en une valeur binaire de 11 bits qui est complétée par des zéros si nécessaire.
749 = 01011101101
S'il y a un nombre impair de caractères, comme dans notre cas, le dernier caractère est simplement codé et converti en une valeur binaire de 6 bits. Dans notre cas, nous avons un seul 'je' à la fin.
L = 21
21 = 010101
Convertir des nombres en binaires et appliquer un remplissage est exactement ce que le Hex la fonction peut faire maintenant. Commençons par écrire une fonction pour calculer le nombre codé pour une paire de caractères.
encodePair = Function ( {pair},
char1 = Substr(pair, 1, 1);
char2 = Substr(pair, 2, 1);
encode1 = If(Length(pair) == 1, 0, encodeAlpha(char1));
encode2 = If(Length(pair) == 1, encodeAlpha(char1),
encodeAlpha(char2));
encode1 * 45 + encode2;
);
Nous pouvons maintenant encoder chaque paire à partir de notre URL pour créer les données de notre code QR.
qrData = "";
For( i = 1, i <= Length( url ), i = i + 2,
charPair = Substr( url, i, 2 );
encodedValue = encodePair(charPair);
asBinary = If(Length(charPair) == 1,
Hex(encodedValue, Base( 2 ), Pad To (6)),
Hex(encodedValue, Base( 2 ), Pad To (11));
);
qrData = qrData || asBinary || " ";
);
show(qrData);
Dans ce JSL, deux caractères sont extraits de l'URL à chaque passage du Pour boucle et le codage alphanumérique est calculé sur cette paire. Le Hex La fonction convertit le nombre en sa représentation binaire. La valeur est complétée à 11 bits ou 6 bits selon qu'il y a 1 ou 2 caractères. La valeur binaire est ajoutée à la valeur précédente. Nous avons ajouté un espace entre les paires pour rendre le résultat plus facile à lire. L'espace ne serait pas inclus dans les données QR réelles.
Voici le résultat pour l'URL :
qrData = "01100011010 10100110010 10100011000 11110111010 01001011011 10011111000 10001010111 01010010001 11000010110 10101011100 01111110000 10101000011 01101101101 10010010000 01010001101 11110010001 00000000001 00111000000 10101100010 00111101101 01100010101 01111101100 11101110011 10100101111 010101 ";
La création du résultat final d'un code QR implique bien d'autres choses, comme le mode d'encodage, l'indicateur de nombre de caractères et le codage de correction d'erreurs. C'est plus que ce que nous devons couvrir pour montrer les nouvelles fonctionnalités. Espérons que cela ait aidé à expliquer certains des nouveaux Hex et Hex à numéro fonctionnalités et comment elles peuvent être appliquées.