第五十九章 Caché 函數大全 $SCONVERT 函數

2020-10-21 13:00:22

文章目錄

第五十九章 Caché 函數大全 $SCONVERT 函數

將二進位制編碼值轉換為數位。

大綱

$SCONVERT(s,format,endian,position)
$SC(s,format,endian,position)

引數

  • s 一串8位元位元組,編碼為一個數位。有效值的限制取決於所選的格式。
  • format 以下格式程式碼之一,指定為帶引號的字串:S1,S2,S4,S8,U1,U2,U4,F4或F8。
  • endian 可選—布林值,其中0 =小端,而1 =大端。預設值為0。
  • position 可選-開始轉換的8位元位元組字串中的字元位置。字元位置從1開始計算。預設值為1。如果指定位置,則必須指定endian或預留位置逗號。

描述

$SCONVERT使用指定的格式將s從8位元位元組的編碼字串轉換為數值。

以下是受支援的格式程式碼:

  • S1 有符號整數,編碼為一個8位元位元組的字串。該值必須在-128到127(含)範圍內。
  • S2 有符號整數,編碼為兩個8位元位元組的字串。該值必須在-32768到32767(包括)之間。
  • S4 有符號整數,編碼為四個8位元位元組的字串。該值必須在-2147483648到2147483647之間(含)。
  • S8 帶符號的整數,編碼為八個8位元位元組的字串。該值必須在-9223372036854775808到9223372036854775807(含)之間。
  • U1 無符號整數編碼為一個8位元位元組的字串。最大值為256。
  • U2 無符號整數編碼為兩個8位元位元組的字串。最大值為65535。
  • U4 無符號整數編碼為四個8位元位元組的字串。最大值是4294967295。
  • F4 IEEE浮點數編碼為四個8位元位元組的字串。
  • F8 IEEE浮點數編碼為八個8位元位元組的字串。

字串s必須包含從指定字元位置開始和之後的足夠字元,以滿足格式程式碼所需的8位元位元組數。例如,$SCONVERT(s,"S4",0,9)要求s的長度至少為12個字元,因為解碼結果來自字元位置9、10、11和12。超出此範圍的值將導致<VALUE OUT OF RANGE>錯誤。

$SCONVERT僅適用於8位元位元組字串。如果$SCONVERT在Caché的Unicode範例上,並且編碼字串中的任何字元在$CHAR(256)$CHAR(65536)範圍內,則返回值是不可預測的。

如果引數s是數位值,則在解碼之前將其轉換為包含規範數位形式的字串。

可以使用IsBigEndian()類方法來確定在作業系統平臺上使用的位順序:1 = big-endian位順序; 0 =小端位順序。

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

$SCONVERT提供$NCONVERT運算的逆函數。

範例

在下面的範例中,$SCONVERT將兩位元組的二進位制編碼值轉換為數位:

/// d ##class(PHA.TEST.Function).SCONVERT()
ClassMethod SCONVERT()
{
	SET x=$NCONVERT(258,"U2")
	ZZDUMP x 
	SET y=$SCONVERT(x,"U2")
	WRITE !,y
}

0000: 02 01 為258的十六進位制102

DHC-APP>d ##class(PHA.TEST.Function).SCONVERT()
 
0000: 02 01                                                   ..
258

下面的範例$SCONVERT將大位元組序的兩位元組二進位制編碼值轉換為數位:

/// d ##class(PHA.TEST.Function).SCONVERT1()
ClassMethod SCONVERT1()
{
	SET x=$NCONVERT(258,"U2",1)
	ZZDUMP x 
	SET y=$SCONVERT(x,"U2",1)
	WRITE !,y
}
DHC-APP>d ##class(PHA.TEST.Function).SCONVERT1()
 
0000: 01 02                                                   ..
258