Javascript hexadecimal to ASCII with latin extended symbols
First an example solution:
let demoHex = `0053007400720069006E006700200068006100730020006C0065007400740065007200730020007700690074006800200064006900610063007200690074006900630073003A0020010D002C00200161002C00200159002C0020002E002E002E`;
function hexToString(hex) {
let str="";
for( var i = 0; i < hex.length; i +=4) {
str += String.fromCharCode( Number("0x" + hex.substr(i,4)));
}
return str;
}
console.log("Decoded string: %s", hexToString(demoHex) );
How to convert hex to ASCII while preserving non-printable characters
xxd
expects two characters per byte. One A
is invalid. Do:
printf '%02X' 10 | xxd -r -p | xxd -p
How to convert hex to ASCII while preserving non-printable characters
Use xxd
. If your input has one character, pad it with an initial 0
.
ASCII does not preserve non-printable characters
It does preserve any bytes, xxd
is the common tool to work with any binary data in shell.
Is it possible to preserve these characters somehow?
Yes - input sequence of two characters per byte to xxd
.
Convert hex to ascii characters
You can trivially adapt the solution I presented here using the function base_convert_arbitrary
.
Edit: I had not read carefully enough :) Base 16 to base 62 is still very doable, as above.
See it in action.
How to convert from Hex to ASCII in JavaScript?
function hex2a(hexx) {
var hex = hexx.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
hex2a('32343630'); // returns '2460'
How to convert Hex to ASCII
There's a hex
package in the standard library that can decode hex into bytes. If it's valid utf-8 (which all ASCII is), you can display it as a string.
Here it is in action:
package main
import (
"encoding/hex"
"fmt"
)
func main() {
a := "73616d706c65"
bs, err := hex.DecodeString(a)
if err != nil {
panic(err)
}
fmt.Println(string(bs))
}
The output is "sample", which you can see on the playground.
convert hex to ascii characters xslt
This is a rather trivial exercise in base conversion:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:param name="str">496e7465726e616c204d65646963696e65</xsl:param>
<xsl:variable name="hex">0123456789abcdef</xsl:variable>
<xsl:variable name="ascii"> !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~</xsl:variable>
<xsl:template match="/">
<acii>
<xsl:call-template name="hex-to-ascii">
<xsl:with-param name="str" select="$str"/>
</xsl:call-template>
</acii>
</xsl:template>
<xsl:template name="hex-to-ascii">
<xsl:param name="str"/>
<xsl:if test="$str">
<!-- extract first 2 digits -->
<xsl:variable name="char1" select="substring($str, 1, 1)"/>
<xsl:variable name="char2" select="substring($str, 2, 1)"/>
<!-- get their hex values -->
<xsl:variable name="val1" select="string-length(substring-before($hex, $char1))"/>
<xsl:variable name="val2" select="string-length(substring-before($hex, $char2))"/>
<!-- convert to dec value -->
<xsl:variable name="dec-value" select="$val1 * 16 + $val2"/>
<!-- get the corresponding ascii character -->
<xsl:value-of select="substring($ascii, $dec-value - 31, 1)"/>
<!-- recursive call with the rest of the hex string -->
<xsl:call-template name="hex-to-ascii">
<xsl:with-param name="str" select="substring($str, 3)"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Result
<?xml version="1.0" encoding="utf-8"?>
<acii>Internal Medicine</acii>
How to convert a hex list to a list of ASCII values?
This will convert from to a list of bytes to ASCII, but 0x80 is invalid ASCII character code. See below:
ct = '0x790x760x7d0x7d0x80'
hex_list = ct.split('0x')
ascii_values=[]
for i in hex_list:
print(i)
if i != '':
try:
bytes_object = bytes.fromhex(i)
ascii_string = bytes_object.decode("ASCII")
ascii_values.append(ascii(ascii_string))
except UnicodeDecodeError:
print('Invalid ASCII... skipping...')
print(ascii_values)
See the answer here regarding 0x80.
Related Topics
Laravel Changing Timezone Not Reflecting the Correct Time
Doctrine: Update Discriminator for Single_Table Inheritance
Warning: File_Get_Contents: Failed to Open Stream: Redirection Limit Reached, Aborting
Make Text Between Asterisks Bold
Given an Email as Raw Text, How to Send It Using PHP
PHP - How to Get Shell Errors Echoed Out to Screen
Why Doesn't Sprintf() Output Anything
Optional Parameter in the Middle of a Route
Access an Array Returned by a Function
Foreach with Three Variables Add
PHP Strtotime Returns a 1970 Date When Date Column Is Null
Phpmailer Not Sending and Not Giving Error
Is There a Difference Between Instantiation with Parentheses or Without
How to Connect to the Database in Openshift Application
Can You Pass by Reference While Using the Ternary Operator
Converting to Date in PHP from Yyyymmdd Format
Php: Most Frequent Value in Array
Laravel Access Denied for User 'Root'@'Localhost' (Using Password: Yes) in Laravel 4.2