센서 또는 네트워크 데이터와 같은 외부 형식의 데이터에는 값을 한 기수 또는 기수에서 다른 기수로 변환해야 하는 경우가 많습니다. JMP 는 다음을 사용하여 16진수에서 10진수로 또는 그 반대로 변환하는 것을 지원했습니다. 마녀 그리고 16진수를 숫자로 기능. 예를 들어:
decimalToHex = Hex(1234, “integer”);
show(decimalToHex);
backToDecimal = HexToNumber(decimalToHex);
show(backToDecimal);
산출:
decimalToHex = "000004D2";
backToDecimal = 1234;
하지만 2진수 또는 8진수 데이터가 있는 경우에는 어떻게 될까요?
더 이상 16진수만이 아닙니다.
와 함께 JMP 15 , 이러한 기능은 2에서 36까지의 모든 기본을 지원하도록 확장되었습니다. 지정함으로써 베이스 옵션에 마녀 함수를 사용하면 10진수는 기본 16이 아닌 해당 진수로 변환됩니다.
decimalToBinary = Hex(1234, Base(2));
show(decimalToBinary);
decimalToOctal = Hex(1234, Base(8));
show(decimalToOctal);
산출:
decimalToBinary = "10011010010";
decimalToOctal = “2322”
이진 데이터의 경우 일관성을 위해 바이트 경계에 값을 추가하려는 경우가 많습니다. 새로운 패드 대상 옵션이 이를 허용합니다.
2바이트로 패딩됨:
Hex(1234, Base(2), Pad To(16));
"0000010011010010"
4바이트로 패딩됨:
Hex(1234, Base(2), Pad To(32));
"00000000000000000000010011010010"
16진수를 숫자로 다음과 같은 경우 반대 기능을 제공합니다. 베이스 옵션이 지정되었습니다.
이진수를 십진수로 변환:
binaryToDec = Hex To Number("10011010010", Base(2));
show(binaryToDec);
octalToDec = Hex To Number("2322", Base(8));
show(octalToDec);
산출:
binaryToDec = 1234;
octalToDec = 1234;
QR 코드
QR 코드(Quick Response Code)는 스캐너나 스마트폰을 사용하여 읽을 수 있는 소량의 바이너리 데이터를 저장하는 2차원 바코드입니다. 이러한 코드는 재고 추적을 위해 개발되었지만 현재는 웹사이트나 애플리케이션의 위치 데이터를 인코딩하는 데 자주 사용됩니다. 예를 들어, 투산에서 열리는 JMP Discovery Summit의 QR 코드는 컨퍼런스의 기본 웹페이지로 연결됩니다.
QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019QR Code for Discovery Summit Tucson 2019Discovery Summit Tucson 2019의 QR 코드
QR 코드는 여러 개의 고정 패턴(예: 정렬을 위한 세 개의 큰 사각형 블록)과 데이터의 셀/콘텐츠 영역 및 오류 감지/수정 정보로 구성됩니다. QR 코드는 다양한 크기로 제공되며 오류 수정 수준도 다양합니다. 이러한 세부 사항은 이 연습에서는 중요하지 않습니다.
다음 URL을 인코딩하고 싶다고 가정해 보겠습니다. 디스커버리 서밋 투산 2019 QR 코드에 필요한 비트로 변환합니다.
다음 URL로 시작할 수 있습니다.
https://discoverysummit.jmp/en/2019/usa/home.html
QR 코드는 숫자, 영숫자, 바이트, 간지의 네 가지 인코딩 유형을 지원합니다. URL은 문자, 숫자 및 기호의 조합이므로 영숫자 인코딩을 사용할 수 있습니다. 영숫자 코딩은 대문자만 지원하지만 URL은 대소문자를 구분하지 않으므로 괜찮습니다.
불행하게도 문자에 대한 QR 인코딩은 단순한 ASCII 값이 아닙니다. 그렇다면 우리는 마녀 인코딩을 얻는 함수입니다. 대신 아래 표를 기반으로 변환을 수행하는 짧은 JSL 함수를 작성하겠습니다.
편지
|
암호
|
아스키
|
편지
|
암호
|
아스키
|
편지
|
암호
|
아스키
|
|---|
0
|
0
|
48
|
에프
|
15
|
70
|
유
|
30
|
85
|
1
|
1
|
49
|
G
|
16
|
71
|
V
|
31
|
86
|
2
|
2
|
50
|
시간
|
17
|
72
|
여
|
32
|
87
|
삼
|
삼
|
51
|
나
|
18
|
73
|
엑스
|
33
|
88
|
4
|
4
|
52
|
제이
|
19
|
74
|
와이
|
34
|
89
|
5
|
5
|
53
|
케이
|
20
|
75
|
지
|
35
|
90
|
6
|
6
|
54
|
엘
|
21
|
76
|
공간
|
36
|
32
|
7
|
7
|
55
|
중
|
22
|
77
|
$
|
37
|
36
|
8
|
8
|
56
|
N
|
23
|
78
|
%
|
38
|
37
|
9
|
9
|
57
|
영형
|
24
|
79
|
*
|
39
|
42
|
ㅏ
|
10
|
65
|
피
|
25
|
80
|
+
|
40
|
43
|
비
|
11
|
66
|
큐
|
26
|
81
|
-
|
41
|
45
|
씨
|
12
|
67
|
아르 자형
|
27
|
82
|
.
|
42
|
46
|
디
|
13
|
68
|
에스
|
28
|
83
|
/
|
43
|
47
|
이자형
|
14
|
69
|
티
|
29
|
84
|
:
|
44
|
58
|
다음은 문자를 영숫자로 인코딩된 값으로 변환하는 JSL 함수입니다.
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;
);
);
그만큼 만약에 명령문은 범위를 사용하여 ASCII 값을 인코딩된 값에 매핑합니다. 예를 들어 문자 0-9는 ASCII 48-57이며 0-9로 인코딩됩니다. 따라서 48을 빼기만 하면 ASCII에서 변환할 수 있습니다. AZ와 az에는 비슷한 범위가 있습니다. 소문자 az는 대문자 AZ의 값에 매핑됩니다. 기호가 여기저기로 이동하므로 대부분은 개별적으로 처리됩니다.
공간을 절약하기 위해 QR 코드는 인코딩된 값을 직접 작성하지 않습니다. 문자열을 문자 쌍으로 나눕니다. URL의 경우 다음과 같습니다.
ht tp s: // ys um mi t를 검색합니다. jm p/ en /2 01 9/ us a/ home me .h tm l
각 문자 쌍에 대해 첫 번째 문자의 인코딩된 값에 45를 곱하고 두 번째 문자의 인코딩된 값에 더합니다.
우리의 첫 번째 쌍은 'ht' :
H = 17
티 = 29
결과는 17 * 45 + 29 = 794입니다. 그런 다음 필요한 경우 0으로 채워지는 11비트 이진 값으로 변환됩니다.
749 = 01011101101
우리의 경우처럼 홀수 개의 문자가 있으면 마지막 문자가 인코딩되어 6비트 이진 값으로 변환됩니다. 우리의 경우에는 단일이 있습니다. '엘' 마지막에.
엘 = 21
21 = 010101
숫자를 이진수로 변환하고 패딩을 적용하는 것이 바로 마녀 이제 기능을 수행할 수 있습니다. 한 쌍의 문자에 대해 인코딩된 숫자를 계산하는 함수를 작성하는 것부터 시작해 보겠습니다.
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;
);
이제 URL의 각 쌍을 인코딩하여 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);
이 JSL에서는 각 패스의 URL에서 두 문자를 가져옵니다. 을 위한 루프와 영숫자 인코딩이 해당 쌍에서 계산됩니다. 그만큼 마녀 함수는 숫자를 이진 표현으로 변환합니다. 값은 문자가 1개인지 2개인지에 따라 11비트 또는 6비트로 채워집니다. 이진 값은 이전 값에 추가됩니다. 출력을 더 쉽게 읽을 수 있도록 쌍 사이에 공백을 추가했습니다. 해당 공간은 실제 QR 데이터에 포함되지 않습니다.
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 ";
인코딩 모드, 문자 수 표시기, 오류 수정 코딩 등 QR 코드의 최종 출력을 생성하는 데에는 더 많은 작업이 필요합니다. 이는 새로운 기능을 보여주기 위해 다루어야 할 것보다 더 많은 내용입니다. 바라건대, 이것이 새로운 내용을 설명하는 데 도움이 되었기를 바랍니다. 마녀 그리고 16진수를 숫자로 기능과 적용 방법.