60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
export function encodeHexUpperCase(data) {
|
|
let result = "";
|
|
for (let i = 0; i < data.length; i++) {
|
|
result += alphabetUpperCase[data[i] >> 4];
|
|
result += alphabetUpperCase[data[i] & 0x0f];
|
|
}
|
|
return result;
|
|
}
|
|
export function encodeHexLowerCase(data) {
|
|
let result = "";
|
|
for (let i = 0; i < data.length; i++) {
|
|
result += alphabetLowerCase[data[i] >> 4];
|
|
result += alphabetLowerCase[data[i] & 0x0f];
|
|
}
|
|
return result;
|
|
}
|
|
export function decodeHex(data) {
|
|
if (data.length % 2 !== 0) {
|
|
throw new Error("Invalid hex string");
|
|
}
|
|
const result = new Uint8Array(data.length / 2);
|
|
for (let i = 0; i < data.length; i += 2) {
|
|
if (!(data[i] in decodeMap)) {
|
|
throw new Error("Invalid character");
|
|
}
|
|
if (!(data[i + 1] in decodeMap)) {
|
|
throw new Error("Invalid character");
|
|
}
|
|
result[i / 2] |= decodeMap[data[i]] << 4;
|
|
result[i / 2] |= decodeMap[data[i + 1]];
|
|
}
|
|
return result;
|
|
}
|
|
const alphabetUpperCase = "0123456789ABCDEF";
|
|
const alphabetLowerCase = "0123456789abcdef";
|
|
const decodeMap = {
|
|
"0": 0,
|
|
"1": 1,
|
|
"2": 2,
|
|
"3": 3,
|
|
"4": 4,
|
|
"5": 5,
|
|
"6": 6,
|
|
"7": 7,
|
|
"8": 8,
|
|
"9": 9,
|
|
a: 10,
|
|
A: 10,
|
|
b: 11,
|
|
B: 11,
|
|
c: 12,
|
|
C: 12,
|
|
d: 13,
|
|
D: 13,
|
|
e: 14,
|
|
E: 14,
|
|
f: 15,
|
|
F: 15
|
|
};
|