----------------------------------------------------------------------------------
@MSGID:
<9e992b6f-44ac-4b58-a1e9-db4d637c3a06n@googlegroups.com> 76838fa5
@REPLY: 1@dont-email.me> 00d27d0a
@REPLYADDR hongy...@gmail.com
<hongyi.zhao@gmail.com>
@REPLYTO 2:5075/128 hongy...@gmail.com
@CHRS: CP866 2
@RFC: 1 0
@RFC-References:
<8404323f-40c3-473b-a5fd-a37e7af1cb3bn@googlegroups.com> 1@dont-email.me>
@RFC-Message-ID:
<9e992b6f-44ac-4b58-a1e9-db4d637c3a06n@googlegroups.com>
@TZUTC: -0700
@PID: G2/1.0
@TID: FIDOGATE-5.12-ge4e8b94
On Monday, September 4, 2023 at 6:58:04 AM UTC+8, Janis Papanagnou wrote:
> On 03.09.2023 08:26,
hongy...@gmail.com wrote:
> > I want to split a hex string into bytes and compute their
xor, as shown below:
> >
> > werner@X10DAi:~$ data=$( sed `s/\\(..\\)/\\1 /g` <<<
23230DFE4C5336413245313636504135303333333401000A130A1814300A01010101 | sed -e `s/[ ]*$//` )
> > werner@X10DAi:~$ IFS=` ` read -ra ADDR <<< "$data"; xor=0; for
i in "${ADDR[@]}"; do xor=$((xor ^ 0x$i)); done; printf `%x
` $xor
> > ea
> >
> > I wonder if there is a more concise and simple method for this purpose.
> You`ve already got a couple solutions. So just for completeness here`s
> a Kornshell solution without a shell loop or external commands
>
> data=...
> printf "%2x
" $((${data//@(??)/0x\\1^}0))
>
> (functionally it`s a variant of Ben`s proposal). Unfortunately it seems
> that bash (with extglob set) does not support the \\1 in the expression?
What`s your ksh version, and which one should I install for testing
your code snippet, as listed below?
werner@X10DAi:~$ ksh
Command `ksh` not found, but can be installed with:
sudo apt install ksh93u+m # version 1.0.0~beta.2-1, or
sudo apt install mksh # version 59c-16
> Janis
>
> > Regards,
> > Zhao
> >
--- G2/1.0
* Origin: usenet.network (2:5075/128)
SEEN-BY: 5001/100 5005/49 5015/255 5019/40 5020/715
848 1042 4441 12000
SEEN-BY: 5030/49 1081 5075/128
@PATH: 5075/128 5020/1042 4441