A menudo es necesario convertir un valor de una base o base a otra con datos en formatos externos, como datos de sensores o de red. JMP ha admitido la conversión de hexadecimal a decimal y viceversa utilizando el Maleficio y Hexadecimal a número funciones. Por ejemplo:
decimalToHex = Hex(1234, “integer”);
show(decimalToHex);
backToDecimal = HexToNumber(decimalToHex);
show(backToDecimal);
Producción:
decimalToHex = "000004D2";
backToDecimal = 1234;
Pero ¿qué pasa si tienes datos binarios u octales?
Ya no es solo maleficio
Con JMP 15 , estas funciones se han ampliado para admitir cualquier base de 2 a 36. Al especificar el Base opción en el Maleficio función, el número decimal se convertirá a esa base en lugar de a la base predeterminada de 16.
decimalToBinary = Hex(1234, Base(2));
show(decimalToBinary);
decimalToOctal = Hex(1234, Base(8));
show(decimalToOctal);
Producción:
decimalToBinary = "10011010010";
decimalToOctal = “2322”
A menudo, con datos binarios, desea que los valores se rellenen hasta los límites de bytes para mantener la coherencia. El nuevo Almohadilla para La opción lo permite.
Rellenado a 2 bytes:
Hex(1234, Base(2), Pad To(16));
"0000010011010010"
Rellenado a 4 bytes:
Hex(1234, Base(2), Pad To(32));
"00000000000000000000010011010010"
Hexadecimal a número proporciona la funcionalidad inversa cuando el Base Se especifica la opción.
Convertir de binario a decimal:
binaryToDec = Hex To Number("10011010010", Base(2));
show(binaryToDec);
octalToDec = Hex To Number("2322", Base(8));
show(octalToDec);
Producción:
binaryToDec = 1234;
octalToDec = 1234;
Códigos QR
Los códigos QR (códigos de respuesta rápida) son códigos de barras bidimensionales que almacenan pequeñas cantidades de datos binarios que se pueden leer mediante un escáner o un teléfono inteligente. Estos códigos se desarrollaron para el seguimiento de inventario, pero ahora se utilizan a menudo para codificar datos de ubicación para sitios web o aplicaciones. Por ejemplo, aquí hay un código QR para la JMP Discovery Summit en Tucson que enlaza con la página web principal de la conferencia.
QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019Código QR para Discovery Summit Tucson 2019
El código QR consta de varios patrones fijos (como los tres grandes bloques cuadrados para alineación) y la celda/área de contenido para los datos más la información de detección/corrección de errores. Los códigos QR vienen en una variedad de tamaños y tienen distintos niveles de corrección de errores. Esos detalles no son importantes para este ejercicio.
Imaginemos que desea codificar la URL para Cumbre de Descubrimiento Tucson 2019 en los bits necesarios para un código QR.
Podemos comenzar con la URL:
https://discoverysummit.jmp/en/2019/usa/home.html
Los códigos QR admiten cuatro tipos de codificación: numérica, alfanumérica, byte y kanji. Dado que nuestra URL es una combinación de letras, números y símbolos, podemos utilizar la codificación alfanumérica. La codificación alfanumérica solo admite letras mayúsculas, pero está bien ya que la URL no distingue entre mayúsculas y minúsculas.
Desafortunadamente, las codificaciones QR de caracteres no son solo valores ASCII. Si lo fueran, podríamos simplemente usar el Maleficio función para obtener la codificación. En su lugar, escribiremos una función JSL breve para realizar la conversión según la siguiente tabla.
Carta
|
Código
|
ASCII
|
Carta
|
Código
|
ASCII
|
Carta
|
Código
|
ASCII
|
|---|
0
|
0
|
48
|
F
|
15
|
70
|
Ud.
|
30
|
85
|
1
|
1
|
49
|
GRAMO
|
dieciséis
|
71
|
V
|
31
|
86
|
2
|
2
|
50
|
h
|
17
|
72
|
W.
|
32
|
87
|
3
|
3
|
51
|
I
|
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
|
Espacio
|
36
|
32
|
7
|
7
|
55
|
METRO
|
22
|
77
|
ps
|
37
|
36
|
8
|
8
|
56
|
norte
|
23
|
78
|
%
|
38
|
37
|
9
|
9
|
57
|
oh
|
24
|
79
|
*
|
39
|
42
|
A
|
10
|
sesenta y cinco
|
PAG
|
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
|
mi
|
14
|
69
|
t
|
29
|
84
|
:
|
44
|
58
|
Aquí está la función JSL para realizar la conversión de un carácter al valor codificado alfanumérico.
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;
);
);
El Si La declaración asigna el valor ASCII al valor codificado utilizando rangos. Por ejemplo, los caracteres 0-9 son ASCII 48-57 y están codificados como 0-9. Por lo tanto, estos se pueden transformar de ASCII simplemente restando 48. Existen rangos similares para AZ y az. Las az minúsculas se asignan a los valores de la AZ mayúscula. Los símbolos saltan de un lado a otro, por lo que la mayoría se manejan de forma individual.
Para ahorrar espacio, el código QR no escribe directamente el valor codificado. Divide la cadena en pares de caracteres. Para nuestra URL, se vería así:
ht tp s: // disc over ys um mi t. jm p/ es /2 01 9/ us a/ ho me .h tm l
Para cada par de caracteres, el valor codificado del primer carácter se multiplica por 45 y se suma al valor codificado del segundo carácter.
Nuestro primer par es 'ht' :
altura = 17
T = 29
El resultado sería 17 * 45 + 29 = 794. Luego se convierte en un valor binario de 11 bits que se rellena con ceros si es necesario.
749 = 01011101101
Si hay un número impar de caracteres, como en nuestro caso, el último carácter simplemente se codifica y se convierte a un valor binario de 6 bits. En nuestro caso tenemos un solo 'yo' al final.
L = 21
21 = 010101
Convertir números a binario y aplicar relleno es exactamente lo que Maleficio La función puede hacer ahora. Comencemos escribiendo una función para calcular el número codificado para un par de caracteres.
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;
);
Ahora podemos codificar cada par desde nuestra URL para crear los datos de nuestro código 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);
En este JSL, se toman dos caracteres de la URL con cada paso del Para bucle y la codificación alfanumérica se calcula sobre ese par. El Maleficio La función convierte el número a su representación binaria. El valor se rellena a 11 bits o 6 bits dependiendo de si hay 1 o 2 caracteres. El valor binario se añade al valor anterior. Agregamos un espacio entre los pares para que el resultado sea más fácil de leer. El espacio no se incluiría en los datos QR reales.
Aquí está el resultado de la 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 ";
Hay mucho más que implica crear el resultado final de un código QR, como el modo de codificación, el indicador de recuento de caracteres y la codificación de corrección de errores. Eso es más de lo que necesitamos cubrir para mostrar las nuevas funciones. Con suerte, esto ayudó a explicar algunas de las nuevas Maleficio y Hexadecimal a número características y cómo se pueden aplicar.