Conversion from Hexadecimal to binary


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Conversion from Hexadecimal to binary
# 15  
Old 03-14-2014
Not working, same message
Code:
/usr/xpg4/bin/awk  '

function mystrtonum(str,        ret, chars, n, i, k, c)
     {
         if (str ~ /^0[0-7]*$/) {
             # octal
             n = length(str)
             ret = 0
             for (i = 1; i <= n; i++) {
                 c = substr(str, i, 1)
                 if ((k = index("01234567", c)) > 0)
                     k-- # adjust for 1-basing in awk
     
                 ret = ret * 8 + k
             }
         } else if (str ~ /^0[xX][[:xdigit:]]+/) {
             # hexadecimal
             str = substr(str, 3)    # lop off leading 0x
             n = length(str)
             ret = 0
             for (i = 1; i <= n; i++) {
                 c = substr(str, i, 1)
                 c = tolower(c)
                 if ((k = index("0123456789", c)) > 0)
                     k-- # adjust for 1-basing in awk
                 else if ((k = index("abcdef", c)) > 0)
                     k += 9
     
                 ret = ret * 16 + k
             }
         } else if (str ~ \
       /^[-+]?([0-9]+([.][0-9]*([Ee][0-9]+)?)?|([.][0-9]+([Ee][-+]?[0-9]+)?))$/) {
             # decimal number, possibly floating point
             ret = str + 0
         } else
             ret = "NOT-A-NUMBER"
     
         return ret
     }



function bits2str(bits,        data, mask)
     {
         if (bits == 0)
             return "0"

         mask = 1
         for (; bits != 0; bits = rshift(bits, 1))
             data = (and(bits, mask) ? "1" : "0") data

         while ((length(data) % 1) != 0)
             data = "0" data

         return data
     }

     {for(i=5;i<=NF;i++)$i = bits2str(mystrtonum("0x"$i))}1' t.log

# 16  
Old 03-14-2014
Hi,
Just for fun, with sed:
Code:
$ cat htob.sed
h
s/[^ ]* //
s/0/XXXX/g
s/1/XXXY/g
s/2/XXYX/g
s/3/XXYY/g
s/4/XYXX/g
s/5/XYXY/g
s/6/XYYX/g
s/7/XYYY/g
s/8/YXXX/g
s/9/YXXY/g
s/A/YXYX/g
s/B/YXYY/g
s/C/YYXX/g
s/D/YYXY/g
s/E/YYYX/g
s/F/YYYY/g
y/XY/01/
x
s/ .*//
G
s/\n/ /
s/ 0*1/ 1/g
s/ 0* / 0 /g
s/ 0*$/ 0/g

Code:
$ cat filetoconv
WS-2 23 345 235
DT-3 45 4A3 000
pp-2 76 300 E4

Code:
$ sed -f htob.sed filetoconv
WS-2 100011 1101000101 1000110101
DT-3 1000101 10010100011 0
pp-2 1110110 1100000000 11100100

Regards.
# 17  
Old 03-16-2014
1993 and later versions of the Korn shell give you some other options. On Solaris 10, /bin/ksh is based on ksh88, but I believe /usr/dt/bin/dtksh should work (although i don't currently have access to a system to verify it).

If the hexadecimal values you're trying to convert can be represented in a long in the programming model used by the shell on your system, the script:
Code:
#!/usr/dt/bin/dtksh
while read -A a
do      printf '%s' "${a[0]}"
        for ((i = 1; i < ${#a[@]}; i++))
        do
                typeset -i2  b=0x${a[i]}

                printf " %s" ${b:2}
        done
        echo
done < Input

should do what you want. If you have arbitrarily long strings of hexadecimal digits, to convert to binary, I think the following script does what you want:
Code:
#!/usr/dt/bin/dtksh
typeset -A b b1
b1['0']='0';    b['0']='0000'
b1['1']='1';    b['1']='0001'
b1['2']='10';   b['2']='0010'
b1['3']='11';   b['3']='0011'
b1['4']='100';  b['4']='0100'
b1['5']='101';  b['5']='0101'
b1['6']='110';  b['6']='0110'
b1['7']='111';  b['7']='0111'
b1['8']='1000'; b['8']='1000'
b1['9']='1001'; b['9']='1001'
b1['A']='1010'; b['A']='1010'
b1['B']='1011'; b['B']='1011'
b1['C']='1100'; b['C']='1100'
b1['D']='1101'; b['D']='1101'
b1['E']='1110'; b['E']='1110'
b1['F']='1111'; b['F']='1111'
b1['a']='1010'; b['a']='1010'
b1['b']='1011'; b['b']='1011'
b1['c']='1100'; b['c']='1100'
b1['d']='1101'; b['d']='1101'
b1['e']='1110'; b['e']='1110'
b1['f']='1111'; b['f']='1111'
while read -A a
do      printf '%s' "${a[0]}"
        for ((i = 1; i < ${#a[@]}; i++))
        do      printf ' %s' "${b1[${a[$i]:0:1}]}"
                for ((j = 1; j < ${#a[$i]}; j++))
                do      printf '%s' "${b[${a[$i]:$j:1}]}"
                done
        done
        echo
done < Input

I used the file Input containing:
Code:
WS-2 23 345 235
DT-3 45 4A3 000
pp-2 76 300 E4
hex 10 21 32 43 54 65 76 87 98 A9 BA CB DC ED FE 0F AbCdEf1
hex2long 1234567890ABCDEFabcdef1234567890abcdefABCDEF

as a test case using /bin/ksh on OS X. The values show in red produced different results from these two scripts. The output produced by the 1st script above is:
Code:
WS-2 100011 1101000101 1000110101
DT-3 1000101 10010100011 0
pp-2 1110110 1100000000 11100100
hex 10000 100001 110010 1000011 1010100 1100101 1110110 10000111 10011000 10101001 10111010 11001011 11011100 11101101 11111110 1111 1010101111001101111011110001
hex2long 0

and the output produced by the 2nd script above is:
Code:
WS-2 100011 1101000101 1000110101
DT-3 1000101 10010100011 000000000
pp-2 1110110 1100000000 11100100
hex 10000 100001 110010 1000011 1010100 1100101 1110110 10000111 10011000 10101001 10111010 11001011 11011100 11101101 11111110 01111 1010101111001101111011110001
hex2long 10010001101000101011001111000100100001010101111001101111011111010101111001101111011110001001000110100010101100111100010010000101010111100110111101111101010111100110111101111


Last edited by Don Cragun; 03-16-2014 at 09:45 PM.. Reason: Noted how the script were tested.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Hexadecimal to binary operation

Dear all, I am trying to write c-program to read the following file containing hexadecimal values (snippet of big data file). I want to combine two hexadecimal values together like A0A03E01 and then would like to have the binary equivalent to perform further test on it. Unfortunately, it failed... (16 Replies)
Discussion started by: emily
16 Replies

2. Shell Programming and Scripting

Hexadecimal to Binary conversion

Hi Guys, Is it possible to convert the hexadecimal to Binary by unix command.....I could not figure out.... If I need to convert AF6D to binary...what could be the way to do? Thanks in advance!! ---------- Post updated at 02:57 AM ---------- Previous update was at 02:42 AM ---------- I... (6 Replies)
Discussion started by: Indra2011
6 Replies

3. Shell Programming and Scripting

NAWK conversion of hexadecimal input to decimal output via printf, I am close I can feel it

I have searched and the answers I have found thus far have led me to this point, so I feel I am just about there. I am trying to convert a column of hexadecimal to decimal values so that I can filter out via grep just the data I want. I was able to pull my original 3 character hex value and... (10 Replies)
Discussion started by: PCGameGuy
10 Replies

4. Solaris

binary conversion

Why would a binary which was compiled on a Solaris-10 not be runnable in a SunOS 5.10? (they are supposed to be precisely equivalent). When I run the file command on it, it says: ELF 32-bit LSB executable 80386 Version 1, dynamically linked, not stripped, no debugging information available... (10 Replies)
Discussion started by: steve701
10 Replies

5. Shell Programming and Scripting

binary to ascii conversion

Hi, I have got a library file, created by compiling C code. The file information with "file" command, gives it a "application/x-archive" type file. I want to extract the release string of my software from this file, so that i can know which version of C files were used to create the lib. Can... (3 Replies)
Discussion started by: atulmt
3 Replies

6. Shell Programming and Scripting

binary file conversion

Hello folks, i have a binary text file but i am not able to convert into text format, please suggest. thanks. (2 Replies)
Discussion started by: learnbash
2 Replies

7. Programming

Binary conversion function

Is/are there any function(s) in C that convert(s) character/ASCII/Decimal to binary and vice versa? what about bcopy and strcpy? (1 Reply)
Discussion started by: Peevish
1 Replies

8. Shell Programming and Scripting

Decimal to Hexadecimal conversion

Hi frnds :) I need a small help... I have a very long file containing 20 digits decimal number which i want to convert into the corresponding 16 digit hexadecimal values. File looks like.... 11908486672755551741 05446378739602232559 04862605079740156652 . . . I tried the script for i... (7 Replies)
Discussion started by: vanand420
7 Replies

9. UNIX for Dummies Questions & Answers

Binary file conversion

All, I want to convert multiple \0 005 characters to line feed 012 character in a binary file to make to readable. Here is the sample od -c file output: 0000000 254 355 \0 005 s r \0 * c o m . c i s c Here is the sample od -b file output: 0000000 254 355 000... (0 Replies)
Discussion started by: bubba112557
0 Replies

10. Shell Programming and Scripting

shell script conversion to binary

My question is: i have a script called getevent to run i just call ./getevent can i convert this to make it binary executable and not letting my clients open it and see the code.??:( I am using Solaris 8. (3 Replies)
Discussion started by: bcheaib
3 Replies
Login or Register to Ask a Question