如何於 RPG 中取得一個字串 的 XOR 值?
由於現今線上交易頻繁, 時常需要將訊息加以確認無誤,
會使用一些方法, 其中一般較常使用的是 XOR, V5R2
才開始有內建函數 %bitxor 功能, V5R2以前需要使用 _XORSTR MI 函數.
內建函數 %bitxor 取得一個字串 的 XOR 值
File : QRPGLESRC
Member: XORR
Type : RPGLE
Usage : CRTBNDRPG XORR
OS : V5R2
h debug
* Work fields
d length s 10u 0 inz(1)
d len s 10u 0
d idx s 10u 0
d inpSrc s 256A
d result s 1a
c *entry plist
c parm inpSrc
c parm result
C eval len = %len(%trimR(inpSrc))
c eval result = %subst(inpSrc:1:1)
c for idx = 2 to len
c eval result = %bitxor(
c result:
c %subst(inpSrc:idx:1)
c )
c endfor
c eval *inLr = *on
利用 MI _XORSTR 來取得一個字串 的 XOR 值
下述範例為利用 MI _XORSTR 來產生 XOR 值, 你可以看 dump 報表中 resultWrk 的值.
File : QRPGLESRC
Member: XORSTRR
Type : RPGLE
Usage : CRTBNDRPG XORSTRR
OS : all
h bnddir('QC2LE') debug dftactgrp(*no)
D
d xorstr pr extproc('_XORSTR')
d resultWrk@ * value
d op1Wrk@ * value
d op2Wrk@ * value
d lenWrk@ 10u 0 value
d operand s 1
* Work fields
d length s 10u 0 inz(1)
d len s 10u 0
d idx s 10u 0
d op1 s like(operand)
d op2 s like(operand)
d result s like(operand)
d resultwrk s like(operand)
d op1@ s *
d op2@ s *
d resultwrk@ s *
d inpSrc s 256A
c eval inpSrc = X'00' + '1234567890'
c eval op1@ = %addr(inpSrc)
c eval resultWrk@ = %addr(resultWrk)
c eval len = %len(%trimr(inpSrc))
c for idx = 1 to (len-1)
c eval op2@ = %addr(inpSrc) + idx
c callp xorstr(resultWrk@: op1@: op2@ : length)
c eval op1@ = resultWrk@
c dump
c endfor
c eval *inLr = *on
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期一, 11月 06, 2023
2005-04-17 如何於 RPG 中取得一個字串 的 XOR 值?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言