Bei Daten in externen Formaten wie Sensor- oder Netzwerkdaten ist häufig die Konvertierung eines Werts von einer Basis oder Basis in eine andere erforderlich. JMP unterstützt die Konvertierung von hexadezimal in dezimal und zurück mit dem Verhexen Und Hex zu Zahl Funktionen. Zum Beispiel:
decimalToHex = Hex(1234, “integer”);
show(decimalToHex);
backToDecimal = HexToNumber(decimalToHex);
show(backToDecimal);
Ausgabe:
decimalToHex = "000004D2";
backToDecimal = 1234;
Aber was ist, wenn Sie binäre oder oktale Daten haben?
Nicht mehr nur verhexen
Mit JMP 15 Diese Funktionen wurden erweitert, um jede Basis von 2 bis 36 zu unterstützen. Durch die Angabe der Base Option auf der Verhexen Funktion wird die Dezimalzahl in diese Basis und nicht in die Standardbasis 16 konvertiert.
decimalToBinary = Hex(1234, Base(2));
show(decimalToBinary);
decimalToOctal = Hex(1234, Base(8));
show(decimalToOctal);
Ausgabe:
decimalToBinary = "10011010010";
decimalToOctal = “2322”
Bei Binärdaten möchten Sie häufig, dass die Werte aus Gründen der Konsistenz bis zu Bytegrenzen aufgefüllt werden. Das neue Pad To Option ermöglicht dies.
Auf 2 Bytes aufgefüllt:
Hex(1234, Base(2), Pad To(16));
"0000010011010010"
Auf 4 Bytes aufgefüllt:
Hex(1234, Base(2), Pad To(32));
"00000000000000000000010011010010"
Hex zu Zahl bietet die umgekehrte Funktionalität, wenn die Base Option angegeben ist.
Konvertieren von binär in dezimal:
binaryToDec = Hex To Number("10011010010", Base(2));
show(binaryToDec);
octalToDec = Hex To Number("2322", Base(8));
show(octalToDec);
Ausgabe:
binaryToDec = 1234;
octalToDec = 1234;
QR-Codes
QR-Codes (Quick Response Codes) sind zweidimensionale Barcodes, die kleine Mengen binärer Daten speichern, die mit einem Scanner oder Smartphone gelesen werden können. Diese Codes wurden für die Bestandsverfolgung entwickelt, werden heute jedoch häufig zur Codierung von Standortdaten für Websites oder Anwendungen verwendet. Hier ist zum Beispiel ein QR-Code für den JMP Discovery Summit in Tucson, der auf die Hauptwebseite der Konferenz verweist.
QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR-Code für Discovery Summit Tucson 2019
Der QR-Code besteht aus mehreren festen Mustern (z. B. den drei großen quadratischen Blöcken zur Ausrichtung) und dem Zellen-/Inhaltsbereich für die Daten sowie den Fehlererkennungs-/Korrekturinformationen. QR-Codes gibt es in verschiedenen Größen und mit unterschiedlichem Fehlerkorrekturgrad. Diese Details sind für diese Übung nicht wichtig.
Stellen wir uns vor, Sie wollten die URL verschlüsseln Discovery Summit Tucson 2019 in die für einen QR-Code benötigten Bits.
Wir können mit der URL beginnen:
https://discoverysummit.jmp/en/2019/usa/home.html
QR-Codes unterstützen vier Arten der Kodierung: Numerisch, Alphanumerisch, Byte und Kanji. Da unsere URL eine Kombination aus Buchstaben, Zahlen und Symbolen ist, können wir die alphanumerische Kodierung verwenden. Die alphanumerische Codierung unterstützt nur Großbuchstaben, aber das ist in Ordnung, da bei der URL die Groß-/Kleinschreibung nicht beachtet wird.
Leider handelt es sich bei den QR-Kodierungen für Zeichen nicht nur um ASCII-Werte. Wenn ja, könnten wir einfach das verwenden Verhexen Funktion, um die Kodierung zu erhalten. Stattdessen schreiben wir eine kurze JSL-Funktion, um die Konvertierung basierend auf der folgenden Tabelle durchzuführen.
Brief
|
Code
|
ASCII
|
Brief
|
Code
|
ASCII
|
Brief
|
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
|
ICH
|
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
|
Raum
|
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
|
A
|
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
|
Hier ist die JSL-Funktion zur Konvertierung eines Zeichens in den alphanumerisch codierten Wert.
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;
);
);
Der Wenn Die Anweisung ordnet den ASCII-Wert mithilfe von Bereichen dem codierten Wert zu. Beispielsweise sind die Zeichen 0-9 ASCII 48-57 und werden als 0-9 codiert. Daher können diese durch einfaches Subtrahieren von 48 aus ASCII umgewandelt werden. Es gibt ähnliche Bereiche für AZ und az. Die Kleinbuchstaben az werden den Werten für die Großbuchstaben AZ zugeordnet. Die Symbole wechseln sich ab, sodass die meisten einzeln behandelt werden.
Um Platz zu sparen, schreibt der QR-Code den codierten Wert nicht direkt aus. Es zerlegt die Zeichenfolge in Zeichenpaare. Für unsere URL würde es so aussehen:
ht tp s: // disc over er ys um mi t. jm p/ en /2 01 9/ us a/ ho me .h tm l
Für jedes Zeichenpaar wird der codierte Wert für das erste Zeichen mit 45 multipliziert und zum codierten Wert des zweiten Zeichens addiert.
Unser erstes Paar ist 'ht' :
H = 17
T = 29
Das Ergebnis wäre 17 * 45 + 29 = 794. Dieser wird dann in einen 11-Bit-Binärwert umgewandelt, der bei Bedarf mit Nullen aufgefüllt wird.
749 = 01011101101
Bei einer ungeraden Zeichenanzahl, wie in unserem Fall, wird lediglich das letzte Zeichen kodiert und in einen 6-Bit-Binärwert umgewandelt. In unserem Fall haben wir eine Single 'l' Am Ende.
L = 21
21 = 010101
Das Konvertieren von Zahlen in Binärzahlen und das Anwenden von Auffüllungen ist genau das, was das bedeutet Verhexen Funktion kann jetzt tun. Beginnen wir damit, eine Funktion zu schreiben, um die codierte Zahl für ein Zeichenpaar zu berechnen.
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;
);
Jetzt können wir jedes Paar von unserer URL aus kodieren, um die Daten für unseren QR-Code zu erstellen.
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 dieser JSL werden bei jedem Durchgang zwei Zeichen aus der URL übernommen Für Schleife und die alphanumerische Kodierung wird für dieses Paar berechnet. Der Verhexen Die Funktion wandelt die Zahl in ihre binäre Darstellung um. Der Wert wird entweder auf 11 Bit oder 6 Bit aufgefüllt, je nachdem, ob 1 oder 2 Zeichen vorhanden sind. Der Binärwert wird an den vorherigen Wert angehängt. Wir haben zwischen den Paaren ein Leerzeichen eingefügt, um die Ausgabe leichter lesbar zu machen. Das Leerzeichen wäre nicht in den eigentlichen QR-Daten enthalten.
Hier ist das Ergebnis für die 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 ";
Bei der Erstellung der endgültigen Ausgabe eines QR-Codes gibt es noch viel mehr zu beachten, z. B. den Kodierungsmodus, die Zeichenanzahlanzeige und die Fehlerkorrekturkodierung. Das ist mehr, als wir abdecken müssen, um die neuen Funktionen zu zeigen. Hoffentlich hat dies dazu beigetragen, einige der Neuerungen zu erklären Verhexen Und Hex zu Zahl Funktionen und wie diese angewendet werden können.