Source: operations/Endian.js

/**
 * 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;
        }
    },
    
};