校验和函数。
大纲$ZCRC(string,mode,expression)
参数
- string 对其执行校验和操作的字符串。
- mode 指定要使用的校验和模式的整数代码。
- expression 可选-初始
“seed种子”
值,指定为整数。如果省略,则默认为零(0)。
$ZCRC
对字符串执行循环冗余校验,并返回整数校验和值。 $ZCRC
返回的值取决于使用的参数。
-
$ZCRC(string,mode)
计算并返回string的校验和。 mode的值确定$ZCRC计算的校验和的类型。 -
$ZCRC(string,mode,expression)
使用mode指定的模式对字符串进行计算并返回校验和。检查多个字符串时,表达式提供初始的“seed种子”
值。它允许在多个字符串上依次运行$ZCRC
计算,并获得相同的校验和值,就好像已将那些字符串串联在一起,然后在结果字符串上运行$ZCRC
一样。
string
字节字符串。可以指定为值,变量或表达式。仅使用字节字符串,否则将收到<FUNCTION>
错误。
mode
要使用的校验和算法。所有校验和模式都可以使用8位(ASCII)或16位Unicode(宽)字符。模式的合法值为:
Mode | Computes |
---|---|
0 | 8位字节和。简单地将字符串中字符的ASCII值相加。因此,$ZCRC(2,0)=50 ,$ZCRC(22,0)=100 ,$ZCRC(23,0)=101 ,$ZCRC(32,0)=101 。 |
1 | 字节的8位异或 |
2 | 一种16位数据树CRC-CCITT |
3 | 一种16位数据树CRC-16 |
4 | 一种适用于XMODEM协议的16位循环冗余码 |
5 | 一种正确的16位CRC-CCITT |
6 | 正确的16位CRC-16 |
7 | 正确的32位CRC-32。这对应于OS X上的CKSUM实用程序算法3,以及Java实用程序包中的CRC32类。 |
MSM语言模式中的Caché支持模式值0和1。所有其他模式值都会导致<Funct>
错误。
expression
作为初始seed“种子”值的参数。 $ZCRC
将表达式添加到为字符串生成的校验和中。这使您可以依次在多个字符串上运行$ZCRC
计算,并获得保存校验和的值,就好像已将那些字符串串联在一起并在结果字符串上运行$ZCRC
一样。
下面的示例在包含字母A,B和C的字符串上使用mode = 0,并在每种情况下返回校验和198:
DHC-APP> WRITE $ZCRC("ABC",0)
198
DHC-APP>WRITE $ZCRC("CAB",0)
198
DHC-APP>WRITE $ZCRC("BCA",0)
198
校验和的得出如下:
/* 65+66+67 = 198 */
DHC-APP>WRITE $ASCII("A")+$ASCII("B")+$ASCII("C")
198
以下示例显示了每个模式为字符串“ABC”
返回的值:
DHC-APP>d ##class(PHA.TEST.Function).ZCRC()
mode 0=198
mode 1=64
mode 2=14740
mode 3=1411
mode 4=14740
mode 5=23011
mode 6=17697
mode 7=2743272264