95 lines
2.2 KiB
JavaScript
95 lines
2.2 KiB
JavaScript
|
/**
|
||
|
* Endian operations.
|
||
|
*
|
||
|
* @author n1474335 [n1474335@gmail.com]
|
||
|
* @copyright Crown Copyright 2016
|
||
|
* @license Apache-2.0
|
||
|
*
|
||
|
* @namespace
|
||
|
*/
|
||
|
var Endian = {
|
||
|
|
||
|
/**
|
||
|
* @constant
|
||
|
* @default
|
||
|
*/
|
||
|
DATA_FORMAT: ["Hex", "Raw"],
|
||
|
/**
|
||
|
* @constant
|
||
|
* @default
|
||
|
*/
|
||
|
WORD_LENGTH: 4,
|
||
|
/**
|
||
|
* @constant
|
||
|
* @default
|
||
|
*/
|
||
|
PAD_INCOMPLETE_WORDS: true,
|
||
|
|
||
|
/**
|
||
|
* Swap endianness operation.
|
||
|
*
|
||
|
* @param {string} input
|
||
|
* @param {Object[]} args
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
run_swap_endianness: function(input, args) {
|
||
|
var data_format = args[0],
|
||
|
word_length = args[1],
|
||
|
pad_incomplete_words = args[2],
|
||
|
data = [],
|
||
|
result = [],
|
||
|
words = [],
|
||
|
i = 0,
|
||
|
j = 0;
|
||
|
|
||
|
if (word_length <= 0) {
|
||
|
return "Word length must be greater than 0";
|
||
|
}
|
||
|
|
||
|
// Convert input to raw data based on specified data format
|
||
|
switch (data_format) {
|
||
|
case "Hex":
|
||
|
data = Utils.from_hex(input);
|
||
|
break;
|
||
|
case "Raw":
|
||
|
data = Utils.str_to_byte_array(input);
|
||
|
break;
|
||
|
default:
|
||
|
data = input;
|
||
|
}
|
||
|
|
||
|
// Split up into words
|
||
|
for (i = 0; i < data.length; i += word_length) {
|
||
|
var word = data.slice(i, i + word_length);
|
||
|
|
||
|
// Pad word if too short
|
||
|
if (pad_incomplete_words && word.length < word_length){
|
||
|
for (j = word.length; j < word_length; j++) {
|
||
|
word.push(0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
words.push(word);
|
||
|
}
|
||
|
|
||
|
// Swap endianness and flatten
|
||
|
for (i = 0; i < words.length; i++) {
|
||
|
j = words[i].length;
|
||
|
while (j--) {
|
||
|
result.push(words[i][j]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Convert data back to specified data format
|
||
|
switch (data_format) {
|
||
|
case "Hex":
|
||
|
return Utils.to_hex(result);
|
||
|
case "Raw":
|
||
|
return Utils.byte_array_to_utf8(result);
|
||
|
default:
|
||
|
return result;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
};
|