How to Convert Hex to String in JavaScript (With Examples)

Working with hexadecimal data pops up all the time in JavaScript—whether you're dealing with binary formats, crypto functions, or even color codes. But turning that hex string into readable text? That's a common task that trips up a lot of developers. If you need a quick solution, you can try this hex to string tool to test conversions instantly. Let's walk through how to convert hex to string in JavaScript with real examples you can actually use in your projects.

Why Bother Converting Hex to String?

You'll run into hex values in all sorts of places:

Turning hex into a string makes this data readable for humans and easier to work with in your code.

Method 1: The Basic Conversion

Here's the simplest way to turn a hex string into regular text:

function hexToString(hex) {
    if (typeof hex !== 'string') throw new Error('Input must be a string');
    const cleanHex = hex.trim().replace(/[^0-9A-Fa-f]/g, '');
    if (cleanHex.length % 2 !== 0) {
        throw new Error('Hex string must have an even number of characters');
    }
    let str = '';
    for (let i = 0; i < cleanHex.length; i += 2) {
        const byte = parseInt(cleanHex.slice(i, i + 2), 16);
        if (isNaN(byte)) throw new Error('Invalid hex characters detected');
        str += String.fromCharCode(byte);
    }
    return str;
}

// Example:
const hexData = "48656C6C6F20576F726C64"; // "Hello World" in hex
console.log(hexToString(hexData)); // Output: Hello World

How this works:

  1. We loop through the hex string two characters at a time
  2. Each pair gets parsed as a base-16 number
  3. We convert that number to a character with String.fromCharCode()
  4. Build the final string step by step

Method 2: Handling Messy Data

Real-world data isn't always clean—you might get extra characters mixed in. Let's make the function more robust:

 function safeHexToString(hex) {
    // Remove anything that's not a hex character
    const cleanHex = hex.replace(/[^0-9A-Fa-f]/g, '');
    if (cleanHex.length % 2 !== 0) {
        throw new Error('Hex string needs an even number of characters');
    }
    
    let result = '';
    for (let i = 0; i < cleanHex.length; i += 2) {
        const byte = cleanHex.substr(i, 2);
        result += String.fromCharCode(parseInt(byte, 16));
    }
    return result;
}

// Example with extra characters
const messyHex = "4865XX6C6C6F"; 
console.log(safeHexToString(messyHex)); // Still works by ignoring bad characters 

This version:

Method 3: Using Modern Browser APIs

If you're working in modern browsers, the TextEncoder/TextDecoder API is a nice alternative:

 function hexToUtf8(hex) {
    if (typeof hex !== 'string') throw new Error('Input must be a string');
    const cleanHex = hex.trim().replace(/[^0-9A-Fa-f]/g, '');
    if (cleanHex.length % 2 !== 0) {
        throw new Error('Hex string must have an even number of characters');
    }
    const bytes = new Uint8Array(
        cleanHex.match(/.{1,2}/g).map(byte => {
            const val = parseInt(byte, 16);
            if (isNaN(val)) throw new Error('Invalid hex characters');
            return val;
        })
    );
    return new TextDecoder('utf-8').decode(bytes);
}

// Example with emojis
const emojiHex = "F09F988A";
console.log(hexToUtf8(emojiHex)); 

This approach is better for:

Mistakes to Watch For

When working with hex strings, keep an eye out for these common issues:

Real-World Uses

1. Converting Color Codes

 function hexToRGB(hex) {
    const r = parseInt(hex.substr(1,2), 16);
    const g = parseInt(hex.substr(3,2), 16);
    const b = parseInt(hex.substr(5,2), 16);
    return `rgb(${r}, ${g}, ${b})`;
}

console.log(hexToRGB("#FF5733")); // rgb(255, 87, 51) 

2. Parsing API Responses

When APIs send binary data as hex strings:

 fetch('https://api.example.com/data')
    .then(response => response.text())
    .then(hexData => {
        const decoded = hexToString(hexData);
        console.log('Decoded response:', decoded);
    }); 

Common Questions

Q: My hex string has an odd number of characters—what do I do?

A: You can either add a leading zero to the last character or reject the input with an error message. Which one makes sense depends on where your data is coming from.

Q: Can I convert emojis from hex?

A: Absolutely! The TextEncoder/TextDecoder method works best here since emojis use multi-byte UTF-8 sequences.

Q: Does case matter with hex values?

A: JavaScript's parseInt() handles both uppercase and lowercase, so it's usually not a problem. Just try to be consistent with your input format.

Wrapping Up

Converting hex to string in JavaScript isn't as complicated once you see the different approaches. Whether you're working with simple text or complex Unicode characters, these methods cover most scenarios. Just remember to validate your input and handle edge cases if you're using this in production code.