Converting hex to ascii/decimal


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Converting hex to ascii/decimal
# 1  
Old 03-31-2011
Converting hex to ascii/decimal

I am writing a bash script to do some parsing on a log and I am running into a problem when it comes to converting only certain sections of the file from hex to ascii or hex to decimal.

Data Example:

Quote:
------------
ip = 10.2.3.4
------------
Hardware= [ 38 30 30 30 ]
Errors= [ 00 a1 ]
Full= [ 63 ]
SW Version= [ 31 2e 38 2e 31 2e 31 30 39 ]
Test= [ 76 ]
------------
ip = 10.2.3.8
------------
Hardware= [ 34 30 30 30 ]
Errors= [ 00 a1 ]
Full= [ 45 ]
SW Version= [ 31 2e 38 2e 31 2e 31 30 39 ]
Test= [ 76 ]
The hex values after Hardware and SW Version I need to convert from Hex to ASCII and the Errors, Full, Test values I need to convert from hex to decimal.

The output should look like the following:

Quote:
------------
ip = 10.2.3.4
------------
Hardware= [ 8000 ]
Errors= [ 161 ]
Full= [ 99 ]
SW Version= [ 1.8.1.109]
Test= [ 118 ]
------------
ip = 10.2.3.8
------------
Hardware= [ 4000]
Errors= [ 161 ]
Full= [ 69 ]
SW Version= [ 1.8.1.109 ]
Test= [ 118 ]
Thanks for any help!
# 2  
Old 03-31-2011
Code:
$
$ cat xverter
#! /usr/bin/bash

# convert from hex to ascii
sample=" 38 30 30 30"
sample=${sample// /\\x}
sample="$sample\\n"
printf "$sample"

#
# convert from base 16 to base 10

hex=76
((dec=0X$hex))
echo $dec

exit 0
$
$
$ ./xverter
8000
118
$

This User Gave Thanks to Perderabo For This Post:
# 3  
Old 03-31-2011
Thanks , but how would I go about searching for the line and then converting whatever is in between the brackets because its not going to be the same values every time.

Perhaps id have to search for Hardware and then take whatever is in between the brackets set as a variable and then use the above code for the conversion?
# 4  
Old 03-31-2011
Quote:
Originally Posted by Shiftkey
Perhaps id have to search for Hardware and then take whatever is in between the brackets set as a variable and then use the above code for the conversion?
Exactly. And you will need to ensure that you have exactly one space before each hex value for the hex to ascii conversion. And no spaces at all for the hex to decimal conversion.
# 5  
Old 03-31-2011
Ruby(1.9+)
Code:
#!/usr/bin/env ruby 
File.open("file").each do|line|
    if line =~ /^(SW|Hardware)|Error|Test|Full/i
        toconv = line.scan(/\[(.*?)\]/)[0][0]
        if line =~ /SW|Hardware/
            toconv = toconv.split.map{|x|x.hex.chr}.join
        else
            toconv = toconv.split.map{|x|x.hex}.join
        end
        line.gsub!( /(.*\[)(.*)(\].*)/ , "\\1#{toconv}\\3" )
    end
    puts line
end

Test run:
Code:
$ ruby myconvert.rb
------------
ip = 10.2.3.4
------------
Hardware= [8000]
Errors= [0161]
Full= [99]
SW Version= [1.8.1.109]
Test= [118]
------------
ip = 10.2.3.8
------------
Hardware= [4000]
Errors= [0161]
Full= [69]
SW Version= [1.8.1.109]
Test= [118]

# 6  
Old 03-31-2011
A bit verbose, but......
nawk -f shift.awk myFile

shift.awk:
Code:
BEGIN {
  FS="([[]|[]])"
}
function hex2dec(h,  i,x,v){
  h=tolower(h);sub(/^0x/,"",h)
  for(i=1;i<=length(h);++i){
    x=index("0123456789abcdef",substr(h,i,1))
    v=(16*v)+x-1
  }
  return v
}

function hex2str(h) {
  printf("%c", hex2dec(h))
}
/^(--|ip)/ {print; next}

/^(Hardware|SW Version)=/ {
  printf("%s",$1 "[")
  n=split($2, vA,OFS)
  for(i=1;i<=n;i++)
     printf("%c%s", hex2str(vA[i]), (i==n)? "]"ORS:"")
  next
}
{
  printf("%s",$1 "[")
  n=split($2, vA,OFS)
  for(i=1;i<=n;i++)
     printf("%d%s", hex2dec(vA[i]), (i==n)? "]"ORS:"")
}

This User Gave Thanks to vgersh99 For This Post:
# 7  
Old 03-31-2011
Thanks but I dont have ruby installed so I cant test that code out.

trying to finish it up with awk and sed atm, will post if I can get it working.

---------- Post updated at 10:38 AM ---------- Previous update was at 09:57 AM ----------

Awesome vgersh99! I tweaked a few things to match my actual log file and it works perfectly.

Im not to familiar with using awk with bash scripts though, how do I go about combining that piece of awk code with the rest of my bash script? I keep getting errors when I put awk inside the script.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert Hex to Ascii in a Ascii file

Hi All, I have an ascii file in which few columns are having hex values which i need to convert into ascii. Kindly suggest me what command can be used in unix shell scripting? Thanks in Advance (2 Replies)
Discussion started by: HemaV
2 Replies

2. Shell Programming and Scripting

Converting decimal to hex

How to convert decimal value to hex and than take 1st digits as variable sample data 84844294,5,6 51291736,2,3 84844294,5,6 51291736,2,3 i can use {printf "%x,%d\n",$1,$2} but than i want to filter base on 1st hex digit 1st recrd (1 Reply)
Discussion started by: before4
1 Replies

3. Shell Programming and Scripting

Convert hex to decimal

can someone help me in converting hex streams to decimal values using perl script Hex value: $my_hex_stream="0c07ac14001676"; Every hex value in the above stream should be converted in to decimal and separated by comma. The output should be: 12,07,172,20,00,22,118 (2 Replies)
Discussion started by: Arun_Linux
2 Replies

4. Shell Programming and Scripting

Decimal to hex conversion

Dear All PROs Thanks in advance need a shell for Decimal to hex conversion input file (decimal values) 65,5,48,66,133,131,118,47 65,5,48,66,133,131,83,63 . . desire output should be (Hex value)... (11 Replies)
Discussion started by: The_Archer
11 Replies

5. Programming

ascii to hex

Hello guys, i want to convert a text file to hex and have written this code : int main(int argc, char **argv) { ifstream file; string fileName = "CODEZ"; file.open(fileName.c_str()); // oeffen im Text-Modus if(file) {... (5 Replies)
Discussion started by: Kingbruce
5 Replies

6. Programming

After converting the hexstr to Hex and storing the Hex in a char*

Hi All, My main intension of is to convert the Hexstring stored in a char* into hex and then prefixing it with "0x" and suffix it with ',' This has to be done for all the hexstring char* is NULL. Store the result prefixed with "0x" and suffixed with ',' in another char* and pass it to... (1 Reply)
Discussion started by: rvan
1 Replies

7. Shell Programming and Scripting

hex to decimal

hi all, echo "ibase=16;obase=10;11" | bc shouldn't i get 17? i am getting 11 i am trying to convert 11 (hex) to decimal stuck! JAK (4 Replies)
Discussion started by: jakSun8
4 Replies

8. UNIX for Advanced & Expert Users

Converting Binary decimal coded values to Ascii Values

Hi All, Is there any command which can convert binary decimal coded values to ascii values... i have bcd values like below оооооооооооо0о-- -v - Pls suggest a way to convert this. Thanks, Deepti.Gaur (3 Replies)
Discussion started by: gaur.deepti
3 Replies

9. UNIX for Dummies Questions & Answers

Ascii To Hex

How will I display on screen a UNIX ascii file with its HEX equivalent. I want to check whether 0D 0A is coming at the end of the file which I am generating from UNIX. (1 Reply)
Discussion started by: augustinep
1 Replies

10. Programming

converting hex to ascii

Hi everyone! I was wondering if anyone knows how to change hex code back into ascii. when i process a form: " / " turn to " %2F " " @ " turns to " %40 " " ' " turns to " %27 " " ( " turns to " %28 " " ) " turns to " %29 " this is my code so far: order.txt thanks, primal p.s.... (1 Reply)
Discussion started by: primal
1 Replies
Login or Register to Ask a Question