45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
var readUInt4BE = function(buffer, cursor) {
|
|
if(cursor % 1)
|
|
return buffer.readUInt8(Math.floor(cursor)) & 15;
|
|
else
|
|
return buffer.readUInt8(cursor) >> 4;
|
|
};
|
|
|
|
var writeUInt4BE = function(buffer, value, cursor) {
|
|
if(value >= 16)
|
|
throw(new Error('value is out of bounds'));
|
|
|
|
var byteLoc = Math.floor(cursor);
|
|
if(cursor % 1) // Second half byte
|
|
buffer.writeUInt8((readUInt4BE(buffer, byteLoc) << 4 | value), byteLoc);
|
|
else // First half byte
|
|
buffer.writeUInt8((value << 4 | readUInt4BE(buffer, cursor)), byteLoc);
|
|
};
|
|
|
|
var readUInt4LE = function(buffer, cursor) {
|
|
if(cursor % 1)
|
|
return buffer.readUInt8(Math.floor(cursor)) >> 4;
|
|
else
|
|
return buffer.readUInt8(cursor) & 15;
|
|
};
|
|
|
|
var writeUInt4LE = function(buffer, value, cursor) {
|
|
if(value >= 16)
|
|
throw(new Error('value is out of bounds'));
|
|
|
|
var byteLoc = Math.floor(cursor);
|
|
if(cursor % 1)
|
|
buffer.writeUInt8((value << 4 | readUInt4LE(buffer, Math.floor(cursor))), byteLoc);
|
|
else
|
|
buffer.writeUInt8((readUInt4LE(buffer, byteLoc) << 4 | value), byteLoc);
|
|
};
|
|
|
|
module.exports.read = readUInt4BE;
|
|
module.exports.readUInt4 = readUInt4BE;
|
|
module.exports.write = writeUInt4BE;
|
|
module.exports.writeUInt4 = writeUInt4BE;
|
|
module.exports.readUInt4BE = readUInt4BE;
|
|
module.exports.writeUInt4BE = writeUInt4BE;
|
|
module.exports.readUInt4LE = readUInt4LE;
|
|
module.exports.writeUInt4LE = writeUInt4LE;
|