nfccard-tool
Version:
The toolbox for reading and writing nfc cards.
105 lines (85 loc) • 2.65 kB
JavaScript
/**
* Utils and parsing sub-lib
*/
var utils = {
/**
* Conversion utils
*/
byteToHexString: function(uint8arr) {
if (!uint8arr || uint8arr.constructor !== Uint8Array) {
throw new Error('Not an uint8arr');
return '';
}
var hexStr = '';
for (var i = 0; i < uint8arr.length; i++) {
var hex = (uint8arr[i] & 0xff).toString(16);
hex = (hex.length === 1) ? '0' + hex : hex;
hexStr += hex;
}
return hexStr.toUpperCase();
},
hexStringToByte: function(str) {
if (!str || typeof str !== 'string') {
throw new Error('we need a string here')
return new Uint8Array();
}
var a = [];
for (var i = 0, len = str.length; i < len; i+=2) {
a.push(parseInt(str.substr(i,2),16));
}
return new Uint8Array(a);
/**
* Alternatively ?
*/
// new Buffer(str, 'hex');
},
bufferToHexString: function(buffer) {
return buffer.toString('hex');
},
// Convert a decimal int to a hexadecimal string
// eg. number = 225 -> returns e1 - (225=0xE1)
decimalToHexString: function(number) {
if (number < 0){
number = 0xFFFFFFFF + number + 1;
}
return number.toString(16).toUpperCase();
},
// Convert a hex string to number
hexStringToNumber: function(hexString) {
return parseInt(hexString, 16);
},
/**
* ASCII / HEX
*/
hexStringToASCII: function(hexString) {
var hex = hexString.toString(); //force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
},
ASCIIToHexString: function(ASCIIString) {
var arr = [];
for (var i = 0, l = ASCIIString.length; i < l; i ++) {
var hex = Number(ASCIIString.charCodeAt(i)).toString(16);
arr.push(hex);
}
return arr.join('');
},
/**
* @description Fills a buffer until % of an int equals zero with a value
* @returns a filled buffer
*/
bufferFiller: function(initialBuffer, moduloNumber, filler) {
let i=0;
let initBuffLen = initialBuffer.length;
while(initBuffLen % 4 !== 0) {
i++;
initBuffLen++;
}
const bufferFiller = Buffer.allocUnsafe(i)
bufferFiller.fill(0);
return Buffer.concat([initialBuffer, bufferFiller], initialBuffer.length + bufferFiller.length);
}
}
module.exports = utils;