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

第四十二章 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                                             :...
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352