La conversione di un valore da una base o radice a un'altra è spesso richiesta con dati in formati esterni come dati di sensori o di rete. JMP ha supportato la conversione da esadecimale a decimale e viceversa utilizzando il file Esadecimale E Esadecimale al numero funzioni. Per esempio:
decimalToHex = Hex(1234, “integer”);
show(decimalToHex);
backToDecimal = HexToNumber(decimalToHex);
show(backToDecimal);
Produzione:
decimalToHex = "000004D2";
backToDecimal = 1234;
Ma cosa succede se hai dati binari o ottali?
Non più solo esadecimale
Con JMP15 , queste funzioni sono state ampliate per supportare qualsiasi base da 2 a 36. Specificando il Base opzione su Esadecimale funzione, il numero decimale verrà convertito in quella base anziché nella base predefinita di 16.
decimalToBinary = Hex(1234, Base(2));
show(decimalToBinary);
decimalToOctal = Hex(1234, Base(8));
show(decimalToOctal);
Produzione:
decimalToBinary = "10011010010";
decimalToOctal = “2322”
Spesso con i dati binari, si desidera che i valori vengano riempiti fino ai limiti dei byte per coerenza. Il nuovo Pad su l'opzione lo consente.
Riempito a 2 byte:
Hex(1234, Base(2), Pad To(16));
"0000010011010010"
Riempito a 4 byte:
Hex(1234, Base(2), Pad To(32));
"00000000000000000000010011010010"
Esadecimale al numero fornisce la funzionalità inversa quando il file Base l'opzione è specificata.
Convertire da binario a decimale:
binaryToDec = Hex To Number("10011010010", Base(2));
show(binaryToDec);
octalToDec = Hex To Number("2322", Base(8));
show(octalToDec);
Produzione:
binaryToDec = 1234;
octalToDec = 1234;
Codici QR
I codici QR (codici Quick Response) sono codici a barre bidimensionali che memorizzano piccole quantità di dati binari che possono essere letti utilizzando uno scanner o uno smartphone. Questi codici sono stati sviluppati per il monitoraggio dell'inventario, ma ora vengono spesso utilizzati per codificare i dati sulla posizione per siti Web o applicazioni. Ad esempio, ecco un codice QR per il JMP Discovery Summit a Tucson che collega alla pagina web principale della conferenza.
QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019Codice QR per Discovery Summit Tucson 2019
Il codice QR è costituito da diversi modelli fissi (come i tre grandi blocchi quadrati per l'allineamento) e dall'area cella/contenuto per i dati più le informazioni di rilevamento/correzione degli errori. I codici QR sono disponibili in varie dimensioni e hanno diversi livelli di correzione degli errori. Questi dettagli non sono importanti per questo esercizio.
Immaginiamo che tu voglia codificare l'URL per Summit alla scoperta di Tucson 2019 nei bit necessari per un codice QR.
Possiamo iniziare con l'URL:
https://discoverysummit.jmp/en/2019/usa/home.html
I codici QR supportano quattro tipi di codifica: numerica, alfanumerica, byte e Kanji. Poiché il nostro URL è una combinazione di lettere, numeri e simboli, possiamo utilizzare la codifica alfanumerica. La codifica alfanumerica supporta solo le lettere maiuscole, ma va bene poiché l'URL non fa distinzione tra maiuscole e minuscole.
Sfortunatamente, le codifiche QR per i caratteri non sono solo i valori ASCII. Se lo fossero, potremmo semplicemente usare il file Esadecimale funzione per ottenere la codifica. Scriveremo invece una breve funzione JSL per eseguire la conversione in base alla tabella seguente.
Lettera
|
Codice
|
ASCII
|
Lettera
|
Codice
|
ASCII
|
Lettera
|
Codice
|
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
|
IO
|
18
|
73
|
X
|
33
|
88
|
4
|
4
|
52
|
J
|
19
|
74
|
Y
|
34
|
89
|
5
|
5
|
53
|
K
|
20
|
75
|
Z
|
35
|
90
|
6
|
6
|
54
|
l
|
21
|
76
|
Spazio
|
36
|
32
|
7
|
7
|
55
|
M
|
22
|
77
|
$
|
37
|
36
|
8
|
8
|
56
|
N
|
23
|
78
|
%
|
38
|
37
|
9
|
9
|
57
|
O
|
24
|
79
|
*
|
39
|
42
|
UN
|
10
|
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
|
Ecco la funzione JSL per eseguire la conversione da un carattere al valore codificato alfanumerico.
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;
);
);
IL Se L'istruzione mappa il valore ASCII sul valore codificato utilizzando gli intervalli. Ad esempio, i caratteri 0-9 sono ASCII 48-57 e sono codificati come 0-9. Pertanto, questi possono essere trasformati da ASCII semplicemente sottraendo 48. Esistono intervalli simili per AZ e az. Le az minuscole vengono mappate sui valori delle az maiuscole. I simboli saltano, quindi la maggior parte viene gestita su base individuale.
Per risparmiare spazio, il codice QR non scrive direttamente il valore codificato. Suddivide la stringa in coppie di caratteri. Per il nostro URL, sarebbe simile a questo:
ht tp s: // sco ver ys um mi t. jm p/ it /2 01 9/ us a/ ho me .h tm l
Per ogni coppia di caratteri, il valore codificato del primo carattere viene moltiplicato per 45 e aggiunto al valore codificato del secondo carattere.
La nostra prima coppia è 'ht' :
H = 17
T = 29
Il risultato sarebbe 17 * 45 + 29 = 794. Questo viene quindi convertito in un valore binario a 11 bit che, se necessario, viene riempito con zeri.
749 = 01011101101
Se è presente un numero dispari di caratteri, come nel nostro caso, l'ultimo carattere viene semplicemente codificato e convertito in un valore binario a 6 bit. Nel nostro caso, ne abbiamo uno singolo 'io' alla fine.
L=21
21 = 010101
Convertire i numeri in binario e applicare il riempimento è esattamente ciò che Esadecimale la funzione può fare ora. Iniziamo scrivendo una funzione per calcolare il numero codificato per una coppia di caratteri.
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;
);
Ora possiamo codificare ciascuna coppia dal nostro URL per creare i dati per il nostro codice 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);
In questo JSL, vengono presi due caratteri dall'URL con ogni passaggio del file Per loop e su quella coppia viene calcolata la codifica alfanumerica. IL Esadecimale la funzione converte il numero nella sua rappresentazione binaria. Il valore viene riempito a 11 o 6 bit a seconda che siano presenti 1 o 2 caratteri. Il valore binario viene aggiunto al valore precedente. Abbiamo aggiunto uno spazio tra le coppie per rendere l'output più facile da leggere. Lo spazio non verrebbe incluso nei dati QR effettivi.
Ecco il risultato per 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 ";
C'è molto altro da fare nella creazione dell'output finale per un codice QR come la modalità di codifica, l'indicatore del conteggio dei caratteri e la codifica di correzione degli errori. Questo è più di quanto dobbiamo coprire per mostrare le nuove funzionalità. Si spera che questo abbia contribuito a spiegare alcune delle novità Esadecimale E Esadecimale al numero caratteristiche e come possono essere applicate.