美文网首页
第四十二章 Caché 函数大全 $NCONVERT 函数

第四十二章 Caché 函数大全 $NCONVERT 函数

作者: Cache技术分享 | 来源:发表于2020-10-02 08:16 被阅读0次

    第四十二章 Caché 函数大全 $NCONVERT 函数

    将数字转换为编码为8位字符串的二进制值。

    大纲

    $NCONVERT(n,format,endian)
    $NC(n,format,endian)
    

    参数

    • n 任何数字,可以指定为值、变量或表达式。所选格式对有效值施加了其他限制。
    • format 以下格式代码之一,指定为带引号的字符串:S1、S2、S4、S8、U1、U2、U4、F4或F8。
    • endian 可选-布尔值,其中0=小端,1=大端。默认值为0。

    描述

    $NCONVERT使用指定的格式将数字n转换为8位字符的编码字符串。这些字符的值在$CHAR(0)$CHAR(255)之间。

    以下是支持的格式代码:

    • S1 编码成一个8位字节字符串的有符号整数。该值必须在-128到127(含)的范围内。
    • S2 编码成两个8位字节字符串的有符号整数。该值必须在-32768到32767(含)的范围内.
    • S4 编码成四个8位字节字符串的有符号整数。该值必须在-2147483648到2147483647(含)的范围内。
    • S8 编码成八个8位字节字符串的有符号整数。该值必须在-9223372036854775808到9223372036854775807(含)的范围内。
    • U1 编码成一个8位字节字符串的无符号整数。最大值为255。
    • U2 编码成两个8位字节字符串的无符号整数。最大值为65535。
    • U4 编码成四个8位字节字符串的无符号整数。最大值为4294967295。
    • F4 IEEE浮点数编码成4个8位字节的字符串。
    • F8 编码成八个8位字节字符串的IEEE浮点数。

    超出格式限制范围的值会导致<VALUE OUT OF RANGE>错误。为无符号格式指定负数会导致<VALUE OUT OF RANGE>错误。如果n是非数字值(包含任何非数字字符),Caché会将字符串转换为数字值。以非数字字符开头的字符串被转换为0。

    对于除F4和F8以外的所有格式,Caché将小数四舍五入为整数值。

    可以使用IsBigEndian()类方法来确定在操作系统平台上使用哪种位顺序:1 =大端位顺序;0 =小端位顺序。

    DHC-APP>WRITE $SYSTEM.Version.IsBigEndian()
    0
    

    $SCONVERT提供了$NCONVERT操作的逆操作。

    示例

    以下示例将一系列无符号数字转换为双字节编码值:

    /// d ##class(PHA.TEST.Function).NCONVERT1()
    ClassMethod NCONVERT1()
    {
        FOR x=32:1:50 {
            ZZDUMP $NCONVERT(x,"U2") 
        }
        QUIT
    }
    
    
    DHC-APP>d ##class(PHA.TEST.Function).NCONVERT1()
     
    0000: 20 00                                                    .
    0000: 21 00                                                   !.
    0000: 22 00                                                   ".
    0000: 23 00                                                   #.
    0000: 24 00                                                   $.
    0000: 25 00                                                   %.
    0000: 26 00                                                   &.
    0000: 27 00                                                   '.
    0000: 28 00                                                   (.
    0000: 29 00                                                   ).
    0000: 2A 00                                                   *.
    0000: 2B 00                                                   +.
    0000: 2C 00                                                   ,.
    0000: 2D 00                                                   -.
    0000: 2E 00                                                   ..
    0000: 2F 00                                                   /.
    0000: 30 00                                                   0.
    0000: 31 00                                                   1.
    0000: 32 00                                                   2.
    

    超出255范围

    /// d ##class(PHA.TEST.Function).NCONVERT()
    ClassMethod NCONVERT()
    {
        FOR x=254:1:256{
            ZZDUMP $NCONVERT(x,"U1") 
        }
        QUIT
    }
    
    DHC-APP>d ##class(PHA.TEST.Function).NCONVERT()
     
    0000: FE                                                      ??
    0000: FF                                                      ??
      ZZDUMP $NCONVERT(x,"U1")
      ^
    <VALUE OUT OF RANGE>zNCONVERT+2^PHA.TEST.Function.1
    

    以下示例按大端顺序执行相同的操作:

    /// d ##class(PHA.TEST.Function).NCONVERT2()
    ClassMethod NCONVERT2()
    {
        FOR x=250:1:260 {
            ZZDUMP $NCONVERT(x,"U2",1) 
        }
        QUIT
    }
    
    DHC-APP>d ##class(PHA.TEST.Function).NCONVERT2()
     
    0000: 00 FA                                                   .ú
    0000: 00 FB                                                   .??
    0000: 00 FC                                                   .ü
    0000: 00 FD                                                   .??
    0000: 00 FE                                                   .??
    0000: 00 FF                                                   .??
    0000: 01 00                                                   ..
    0000: 01 01                                                   ..
    0000: 01 02                                                   ..
    0000: 01 03                                                   ..
    0000: 01 04                                                   ..
    

    U1,U2,U4对比

    /// d ##class(PHA.TEST.Function).NCONVERT3()
    ClassMethod NCONVERT3()
    {
        FOR x=48:1:58 {
            ZZDUMP $NCONVERT(x,"U1")
        }
        QUIT
    }
    
    /// d ##class(PHA.TEST.Function).NCONVERT4()
    ClassMethod NCONVERT4()
    {
        FOR x=48:1:58 {
            ZZDUMP $NCONVERT(x,"U2")
        }
        QUIT
    }
    
    /// d ##class(PHA.TEST.Function).NCONVERT5()
    ClassMethod NCONVERT5()
    {
        FOR x=48:1:58 {
            ZZDUMP $NCONVERT(x,"U4")
        }
        QUIT
    }
    
    DHC-APP> d ##class(PHA.TEST.Function).NCONVERT3()
     
    0000: 30                                                      0
    0000: 31                                                      1
    0000: 32                                                      2
    0000: 33                                                      3
    0000: 34                                                      4
    0000: 35                                                      5
    0000: 36                                                      6
    0000: 37                                                      7
    0000: 38                                                      8
    0000: 39                                                      9
    0000: 3A                                                      :
    DHC-APP> d ##class(PHA.TEST.Function).NCONVERT4()
     
    0000: 30 00                                                   0.
    0000: 31 00                                                   1.
    0000: 32 00                                                   2.
    0000: 33 00                                                   3.
    0000: 34 00                                                   4.
    0000: 35 00                                                   5.
    0000: 36 00                                                   6.
    0000: 37 00                                                   7.
    0000: 38 00                                                   8.
    0000: 39 00                                                   9.
    0000: 3A 00                                                   :.
    
    DHC-APP> d ##class(PHA.TEST.Function).NCONVERT5()
     
    0000: 30 00 00 00                                             0...
    0000: 31 00 00 00                                             1...
    0000: 32 00 00 00                                             2...
    0000: 33 00 00 00                                             3...
    0000: 34 00 00 00                                             4...
    0000: 35 00 00 00                                             5...
    0000: 36 00 00 00                                             6...
    0000: 37 00 00 00                                             7...
    0000: 38 00 00 00                                             8...
    0000: 39 00 00 00                                             9...
    0000: 3A 00 00 00                                             :...
    

    相关文章

      网友评论

          本文标题:第四十二章 Caché 函数大全 $NCONVERT 函数

          本文链接:https://www.haomeiwen.com/subject/fmqbuktx.html