Find and increment value in string of hex


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find and increment value in string of hex
# 1  
Old 12-19-2017
Find and increment value in string of hex

I have a long string of hex (from ASN.1 data) where I need to find and change a particular hex value only and increment it. The hex pairs either side (84 and a7) of the value to increment will remain constant.

i.e. "84 <length> <value_to_increment> a7" starting with 00.

So end result:

Code:
840100a7
840101a7
...
84020080a7 (length changes to 02 when value reaches 80, 128dec)
84020081a7

Any ideas how best to do this?


Moderator's Comments:
Mod Comment Please use CODE tags (for data as well) as required by forum rules!

Last edited by RudiC; 12-19-2017 at 08:39 AM.. Reason: Added CODE tags.
# 2  
Old 12-19-2017
Code:
sed 's/84/\n84/g; s/a7/a7\n/g' infile | awk --non-decimal-data '
   /84[0-9][0-9]..*[aA]7/ {
      a=substr($0, 1, 4);
      b=substr($0, 5, length($0)-6);
      c=substr($0, length($0)-1);
      l=substr($0, 3, 2)*2;
      b=sprintf("%d", "0x" b); b=sprintf("%0*x", l, b+1)
      $0=a b c
   }
   {printf $0}
   '


Last edited by rdrtx1; 12-19-2017 at 11:19 AM..
# 3  
Old 12-19-2017
Not clear.
Do you have a string with above structure and want to produce a file from it, incrementing the value indicated line by line? Then, where to stop?
Or, do you have a file with above structured values in the lines, and want to just increment each line's value?
I guess, the value 0x7F needs special treatment, as the length has to be incremented, and the value will need four places, then?
# 4  
Old 12-19-2017
Sorry first poster trying to explain... Smilie

So I have a file containing one long line of hex (converted from BER ASN.1), i.e.

Code:
30820170a15c80070400020205010d8119877532221275e5727de311be4e938334297fb650ff00ff00ff82024e4ca31fa01580083033313035343030a2098107831341090000018102689582024e4c840100a70b80045940f1598103058390880102a282010ea4820...

I want to find all occurrences between the hex pairs 84 and a7 and replace these values by (length)(value) where length = 02 if value > 127dec, otherwise 01. And value should be incremented (beginning at 0) for each occurrence.

value will be equal to 2 bytes (4 places) where length = 02.
# 5  
Old 12-19-2017
Now, this is completely different from what you posted in #1. And, still not clear.
There's only one pattern occurrence in above sample, with value 00. That should become 01, understood. you don't say anything about the next pattern occurrence. Should that become 02 regardless of its initial value? Or, its initial value + 1? And, you didn't answer the question about the 0x7F value, should that ever occur.
# 6  
Old 12-19-2017
It's the same question but worded differently, appreciated it's still not clear though.

Ok, new example, original file:

Code:
30820170a15c800704000202050840100a710d8119877532221275e5727de31840100a71be4e938334297fb650ff00ff00ff820840100a724e4ca31fa01580083033313840100a7035343030a2098107831341090000018102689582024e4c840100a70b80045940f15981030583908

should become:

Code:
30820170a15c800704000202050840100a710d8119877532221275e5727de31840101a71be4e938334297fb650ff00ff00ff820840102a724e4ca31fa01580083033313840103a7035343030a2098107831341090000018102689582024e4c840104a70b80045940f15981030583908

So regardless of the initial value it should be replaced, beginning with
Code:
00

for the first occurrence and incremented for every occurrence thereafter.

Where value >
Code:
0x7F

the length (after the 84) will be set to
Code:
02

instead of
Code:
01

and the value will be 2 bytes (4 values) for example
Code:
84020080a7

Does that make sense? Thanks for trying to understand!

Last edited by securegooner; 12-19-2017 at 12:22 PM..
# 7  
Old 12-19-2017
Quote:
Originally Posted by securegooner
.
.
.
Where value >
Code:
0xF7

the length (after the 84) will be set to
Code:
02

instead of
Code:
01

and the value will be 2 bytes (4 values) for example
Code:
84020080a7

.
.
.

Why should 0xF7 be decremented to 0x80?

Last edited by RudiC; 12-19-2017 at 12:24 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find and increment at each occurence of string (loop)

I created script (sh shell) to generate vlc playlist based on some data files. All works fine so far except one string I do not know how to handle with. VLCSTART='<vlc:id>' VLCV=0 VLCEND='</vlc:id>' echo -e $'\n'$'\t'$'\t'$'\t'$'\t'\$VLCSTART$VLCV$VLCENDOutput file contains several occurences... (10 Replies)
Discussion started by: TiedCone
10 Replies

2. Shell Programming and Scripting

String increment in UNIX

Hi, I am able to increment numbers but unable to increment the charters in unix -AIX. Source : AAA BB CCC Increment Number : 5 OUTPUT: AAA BB CCC AAA BB CCD AAA BB CCE AAA BB CCF AAA BB CCG Thanks onesuri Please use CODE tags as required by the forum rules. I have made a wild... (5 Replies)
Discussion started by: onesuri
5 Replies

3. Shell Programming and Scripting

String to HEX conversion in UNIX

i have this below string which i need to convert it to HEX. i have already tried it but it showing extra few things on it.. let me show what i have done and what is the output i am getting and what is the desired output the input string is "!\"\"\"\"\"\"\"!\"\"\"\"\"\"\"" which is... (4 Replies)
Discussion started by: vivek d r
4 Replies

4. Shell Programming and Scripting

How to increment a string variable?

Hi All, I am new to this forum and a novice at shell script. I am trying to write a script to determine each of the NIC configured on a linux system and its speed and Duplex. I came up with the following piece of code: echo `ifconfig -a | grep eth > /home/a/nic.txt` i=`awk -F, '{print... (4 Replies)
Discussion started by: pravin883
4 Replies

5. Shell Programming and Scripting

How to cut the particular string and increment the rows?

Hi am using unix aix I have tried using awk but am getting only output = x ,its not incrementing next output set -A var1 vv qa za ct=0 i=3 while do var1=`echo ${var1}` count=`awk ' NR==$i++ {print;exit}' ${.txt} | cut -c5 ` echo $count let ct=ct+1 done (6 Replies)
Discussion started by: Venkatesh1
6 Replies

6. Programming

Hex string conversion?

Hello all. I need help... How can I cenvert this 42ec93df826c804ea531c56594db453d54daad4b to normal text? What convertor I have to use? Thanks. (12 Replies)
Discussion started by: escudo
12 Replies

7. UNIX for Dummies Questions & Answers

increment numbers in several parts of a string

I know how to do produce this: string01 string02 string03 several different ways. But how do I do produce this (without getting lost in recursion): string01morestring100yetmore10 string02morestring101yetmore20 string03morestring102yetmore30 ...... (2 Replies)
Discussion started by: uiop44
2 Replies

8. Shell Programming and Scripting

Match hex value in string (Perl)

I am trying to match a character return from a website so that I can replace it. It is the '...' character (didnt even know it existed initially). The character apparently has the hex value of 2026, but in the script, attempting to substitute regular 3 periods is not working. What am I... (2 Replies)
Discussion started by: Guyverix
2 Replies

9. Shell Programming and Scripting

increment a value at an offset in hundreds very large hex file

I have a lot of very large hex files that I need to change one value at the same offset and save to another file. I have a script that finds each file and just need to put an operator for each file. I think sed might be able to do this but I have not used it before and would like some help. If... (8 Replies)
Discussion started by: Eruditass
8 Replies

10. Programming

converting character string to hex string

HI Hi I have a character string which contains some special characters and I need it to display as a hex string. For example, the sample i/p string: ×¥ïA Å gïÛý and the o/p should be : D7A5EF4100C5010067EFDBFD Any pointers or sample code pls. (5 Replies)
Discussion started by: axes
5 Replies
Login or Register to Ask a Question