Sponsored Content
Top Forums UNIX for Advanced & Expert Users Convert 32 bit hex value into fields in decimal Post 302619045 by agama on Wednesday 4th of April 2012 09:16:34 PM
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.
 

10 More Discussions You Might Find Interesting

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

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

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

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

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

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

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

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

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

10. 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
All times are GMT -4. The time now is 06:50 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy