Convert 32 bit hex value into fields in decimal


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Convert 32 bit hex value into fields in decimal
# 1  
Old 04-04-2012
Convert 32 bit hex value into fields in decimal

I have 32 bit value in hex that I want to separate into fields and then convert the fields into decimal values.

Input file has 2 words of 32 bit hex values:
Code:
000001ac
ca85210e

Output both words separated into individual bit fields:
Code:
ca85210e: f1(31:9), f2(8:0)
f7c392ac:  f1(31:14), f2(13:6), f3(5:3), f4(2), f5(1), f6(0)

Output file should look like this with original hex value and fields in decimal:
Code:
ca85210e: 0, 428
f7c392ac: 253710, 74, 5, 1, 0, 0

Thank You,
morrbie

Last edited by Scrutinizer; 04-06-2012 at 03:40 PM..
morrbie
# 2  
Old 04-04-2012
I think you have a cut and paste issue with your sample data. Going on what I believe you meant, this will read two lines from stdin and output the 'words' from each line using the indicated bit masking:

Code:
#!/usr/bin/env ksh


l=0
while read word
do
    if (( l < 1 ))
    then
        printf "%08x %d %d\n" 0x$word $(( 0x$word >> 9 )) $(( 0x$word & 0x1ffff ))
    else
        printf "%08x %d %d %d %d %d %d\n"  0x$word $(( 0x$word >> 14 )) $(( (0x$word >> 6)  & 0xff)) $(( (0x$word >> 3)  & 0x07)) $(( (0x$word >> 2)  & 0x01)) $(( (0x$word >> 1)  & 0x01)) $(( 0x$word & 0x01 ))
        break
    fi

    l=1
done



---------- Post updated at 21:07 ---------- Previous update was at 21:03 ----------

From your original post:

Quote:
Input file has 2 words of 32 bit hex values:
000001ac
ca85210e

Output both words separated into individual bit fields:
ca85210e: f1(31:9), f2(8:0)
f7c392ac: f1(31:14), f2(13:6), f3(5:3), f4(2), f5(1), f6(0)
Shouldn't the two values in the file have been
Code:
000001ac
f7c392ac

given the output you listed, or the output should have been:
Code:
000001ac 0 428
ca85210e 207380 132 1 1 1 0

---------- Post updated at 21:16 ---------- Previous update was at 21:07 ----------

And one more note about the solution I posted. I originally read into word and assigned 0x to the variable so that I wouldn't need to prefix $word in each expression. This resulted in interesting behaviour in ksh -- bash seemed to get it right both ways. I need to test with a current build of ksh -- the most recent build I have access to here is 2011/02.

Code that has issues in Kshell:

Code:
#!/usr/bin/env ksh
l=0
while read word
do
    word="0x$word"
    if (( l < 1 ))
    then
        printf "%08x %d %d\n" $word $(( $word >> 9 )) $(( $word & 0x1ffff ))
    else
        printf "%08x %d %d %d %d %d %d\n"  $word $(( $word >> 14 )) $(( ($word >> 6)  & 0xff)) $(( ($word >> 3)  & 0x07)) $(( ($word >> 2)  & 0x01)) $(( ($word >> 1)  & 0x01)) $(( $word & 0x01 ))
        break
    fi

    l=1
done



It prints the first output line incorrectly, but the second is correct. Don't know if anybody wants to verify or offer an explanation, but it would be appreciated.
# 3  
Old 04-05-2012
Yes, the output was posted incorrectly. Sorry about that. I must have been in a rush. Forgot to cut and paste the correct hex words in the output.
It should be:
Code:
000001ac 0 428
ca85210e 207380 132 1 1 1 0

Thank You for the reply. I will try it out.

Last edited by fpmurphy; 04-06-2012 at 12:09 AM..
morrbie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Urgent help needed.. C++ program to convert decimal to hexa decimal

Hi , seq can be 0...128 int windex = seq / 8; int bindex = seq % 8; unsigned char bitvalue = '\x01' << (7-bindex) ; bpv.bitmapvalue = bitvalue; This is the part of a program to convert decimal to bitmap value of hexadecimal. I want this to change to convert only to... (1 Reply)
Discussion started by: greenworld123
1 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

How to convert a file containing hex code to decimal using script?

The file contains code like the below and need to convert each one into a decimal 00 00 00 04 17 03 06 01 So the output should come as 0 0 0 4 23 3 6 1 (24 Replies)
Discussion started by: necro98
24 Replies

4. 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

5. Shell Programming and Scripting

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: The hex values after Hardware and SW Version I need to convert from Hex to ASCII and the... (16 Replies)
Discussion started by: Shiftkey
16 Replies

6. 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

7. Shell Programming and Scripting

Convert hex to decimal or reverse is better?

Please Help Me! about the problem down under. I have 2 files with nearly the same characteristics, I have to convert one to the other format or the other format to one's format. I want to write it with awk. The first file contain lines like this: 300000001#A#Y#Y#Y#Y The other file contain... (4 Replies)
Discussion started by: Axel82
4 Replies

8. Shell Programming and Scripting

How to convert hex numbers to decimal ?

Hi, please tell me how to convert hex number to decimal 000000E7 000000000002640D 0000000000025B16 and seconds to minutes, hours, days, months, years bytes to kbytes, mbytes , gbytes read the following examples while read a b do printf "%5d %5d\n" "0x$a" "0x$b" done < "$FILE"... (15 Replies)
Discussion started by: jack2
15 Replies

9. 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

10. Shell Programming and Scripting

Hex to Decimal Convertion

Dear all, I have a file like this. EE48 4473 7FC9 EE48 102C D23 EE48 4DD 27D EE48 0 0 EE48 3FFE 854 F230 DC6 ... (1 Reply)
Discussion started by: Nayanajith
1 Replies
Login or Register to Ask a Question