Node.js中HEX转ASCII结果异常求助:如何正确解析HEX值?
Hey there! Let's clear up this confusion for you. The difference between the two results isn't because you made a mistake—it's about whether the tool is showing all characters (including unprintable control codes) or just the visible ones.
First, let's break down your HEX string 0x2b6162630704fe17 byte by byte:
0x2b→+(printable)0x61→a(printable)0x62→b(printable)0x63→c(printable)0x07→ BEL (bell character, unprintable, shows as\u0007)0x04→ EOT (end of transmission, unprintable, shows as\u0004)0xfe→þ(printable extended ASCII)0x17→ DC1 (device control 1, unprintable, shows as\u0017)
The hex2ascii module is doing the right thing by outputting every single character, including those unprintable control codes. Most online converters, though, automatically hide these invisible characters to make the result look cleaner—that's why you only see +abcþ there.
Here's how to handle both cases in Node.js:
1. Get the full, unfiltered ASCII output (matches hex2ascii)
You don't even need a third-party module—Node.js's native Buffer can do this perfectly:
const hexString = '2b6162630704fe17'; const buffer = Buffer.from(hexString, 'hex'); const fullAscii = buffer.toString('ascii'); console.log(fullAscii); // Output: "+abc\u0007\u0004þ\u0017"
2. Get only printable ASCII characters (matches online converter)
If you want to replicate the online tool's result, just filter out unprintable control characters (ASCII codes 0-31 and 127):
const hexString = '2b6162630704fe17'; const buffer = Buffer.from(hexString, 'hex'); const printableAscii = buffer.toString('ascii').replace(/[\x00-\x1F\x7F]/g, ''); console.log(printableAscii); // Output: "+abcþ"
The regex [\x00-\x1F\x7F] targets all invisible control characters and removes them entirely.
So to sum up: your original hex2ascii usage wasn't wrong—it was just showing you the full picture, while the online tool was simplifying it for readability. Pick the approach that fits your use case!
内容的提问来源于stack exchange,提问作者spaceman

