Skip to content

Instantly share code, notes, and snippets.

@poppycocker
Created January 8, 2015 08:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save poppycocker/554c6d69a31bdd0cb335 to your computer and use it in GitHub Desktop.
Save poppycocker/554c6d69a31bdd0cb335 to your computer and use it in GitHub Desktop.
multiple radix converter
(function() {
var def = [];
def[2] = {
label: 'bin',
regex: /^\-{0,1}(0|1)+$/g
};
def[10] = {
label: 'dec',
regex: /^\-{0,1}[0-9]+$/g
};
def[16] = {
label: 'hex',
regex: /^\-{0,1}([0-9]|[A-F]|[a-f])+$/g
};
var errors = [
'[val] is required.',
'The value of [radix] is invalid. Set 2 or 10 or 16.',
'The format of [val] is invalid.'
];
var check = function(val, radix, ret) {
if (typeof val === 'undefined') {
ret.errNo = 0;
return false;
}
if (+radix === 0 || !(+radix in def)) {
ret.errNo = 1;
return false;
}
if (!('' + val).match(def[radix].regex)) {
ret.errNo = 2;
return false;
}
return true;
};
var convert = function(val, radix, ret) {
var v = parseInt('' + val, +radix);
def.forEach(function(d, b) {
ret[d.label] = v.toString(b).toUpperCase();
});
};
var c = function() {};
c.prototype = {
getMultiple: function(val, radix) {
var ret = {};
if (typeof radix === 'undefined') {
radix = 10;
}
if (check(val, radix, ret)) {
convert(val, radix, ret);
}
return ret;
},
getErrorMessage: function(errNo) {
return errors[errNo] || 'Not Defined.';
}
};
this.RadixConverter = c;
}).call(this);
// tests
(function() {
var rc = new RadixConverter();
var chk = function(n, a, e) {
var result = true;
for (i in a) {
result &= (a[i] === e[i]);
}
console.log(n + ': ' + (result ? 'OK' : 'NG'));
};
chk(1, rc.getMultiple(16, 10), {
bin: '10000',
dec: '16',
hex: '10'
});
chk(2, rc.getMultiple('abc', 16), {
bin: '101010111100',
dec: '2748',
hex: 'ABC'
});
chk(3, rc.getMultiple('-11111111', 2), {
bin: '-11111111',
dec: '-255',
hex: '-FF'
});
chk(4, rc.getMultiple(), {
errNo: 0
});
chk(5, rc.getMultiple('xyz', 0), {
errNo: 1
});
chk(6, rc.getMultiple('123', 100), {
errNo: 1
});
chk(7, rc.getMultiple('-123', 'abc'), {
errNo: 1
});
chk(8, rc.getMultiple('xyz', 10), {
errNo: 2
});
chk(9, rc.getMultiple(-12345, 2), {
errNo: 2
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment