-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathhex.js
63 lines (48 loc) · 1.45 KB
/
hex.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// ASCII to hex for IKE/MID message
function a2h(data) {
const array = [];
for (let n = 0, l = data.length; n < l; n++) {
array.push(data.charCodeAt(n));
}
return array;
}
// Convert hex to ASCII
function h2a(data) {
data = data.toString();
let str = '';
for (let i = 0; i < data.length; i += 2) { str += String.fromCharCode(parseInt(data.substr(i, 2), 16)); }
return str;
}
// Convert hex to string
function h2s(data) {
data = Buffer.from(data);
if (data[0] === 0x1A) data = data.slice(3); // Check control message
if (data[0] === 0x21) data = data.slice(4); // MID menu text
if (data[0] === 0x23) data = data.slice(4); // IKE text
if (data[0] === 0x24) data = data.slice(3); // OBC text
// IKE text suffix
if (data[data.length - 1] === 0x04) data = data.slice(0, -1);
// Format
data = data.toString();
data = data.replace(/�/g, '°');
data = data.replace(/ {2}/g, ' ');
data = data.trim();
return data;
}
// Convert integer to hex string
// Useful for CANBUS ARBIDs, etc
//
// hex.i2s(191) => '0xBF'
function i2s(data, prefix = true, length = 2) {
if (typeof data === 'undefined' || data === null || data === '') return false;
let hexstr = data.toString(16).toUpperCase().padStart(length, '0');
if (prefix === true) hexstr = '0x' + hexstr;
return hexstr;
}
module.exports = {
// Functions
a2h : (data) => a2h(data),
h2a : (data) => h2a(data),
h2s : (data) => h2s(data),
i2s : (data, prefix, length) => i2s(data, prefix, length),
};