$ZWPACK および $ZWBPACK (ObjectScript)
Synopsis
$ZWPACK(string) $ZWBPACK(string)
引数
引数 | 説明 |
---|---|
string | 2 つ以上の 8 ビット文字で構成される文字列。string は、偶数の文字でなければなりません。 |
概要
$ZWPACK 関数は、8 ビット文字の文字列を 16 ビットのワイド文字の文字列としてリトル・エンディアン順にパックします。2 つの 8 ビット文字は、1 つの 16 ビット文字にパックされます。
$ZWBPACK は同じタスクを実行しますが、8 ビット文字は文字列は 16 ビットのワイド文字にビッグ・エンディアン順に格納されます。
文字列のパックは、格納する文字列の文字数と文字列操作を半分にするための方法です。アンパックすると、元の 8 ビット文字の文字列を表示するために復元されます。これらの操作は、データ内で Unicode 文字が許可されているときは使用しないでください。
入力 string には、以下の要件があります。
-
string は、偶数の文字で構成されなければなりません。空の文字列は許可され、空の文字列が返されます。奇数の文字を指定すると、<FUNCTION> エラーが返されます。
-
string には、マルチバイト文字を含めることができません。string で $ZISWIDE を使用して、マルチバイト文字が含まれていないかを確認できます。マルチバイト文字を含む string で $ZWPACK あるいは $ZWBPACK を使用すると、システムは <WIDE CHAR> エラーを生成します。
IsBigEndian()Opens in a new tab クラス・メソッドを使用して、オペレーティング・システム・プラットフォームでどのビット順序を使用するかを決定できます (1 = ビッグ・エンディアン・ビット順、0 = リトル・エンディアン・ビット順)。
WRITE $SYSTEM.Version.IsBigEndian()
例
以下の例は、$ZWPACK が 8 ビット文字を 2 つの 16 ビットのワイド文字にパックする方法を示します。パックした文字列のワイド文字では、バイト順序が 16 進数 4241 4443 のようにリトル・エンディアンになります。
SET str=$CHAR(65,66,67,68)
WRITE !,$LENGTH(str)," characters: ",str
WRITE !,"$ZWPACK"
SET wstr=$ZWPACK(str)
WRITE !,$LENGTH(wstr)," packed characters: ",wstr
ZZDUMP wstr
WRITE !,"$ZWUNPACK"
SET nstr=$ZWUNPACK(wstr)
WRITE !,$LENGTH(nstr)," unpacked characters: ",nstr
以下の例は、$ZWBPACK が 8 ビット文字を 2 つの 16 ビットのワイド文字にパックする方法を示します。パックした文字列のワイド文字では、バイト順序が 16 進数 4142 4344 のようにビッグ・エンディアンになります。
SET str=$CHAR(65,66,67,68)
WRITE !,$LENGTH(str)," characters: ",str
WRITE !,"$ZWBPACK"
SET wstr=$ZWBPACK(str)
WRITE !,$LENGTH(wstr)," packed characters: ",wstr
ZZDUMP wstr
WRITE !,"$ZWBUNPACK"
SET nstr=$ZWBUNPACK(wstr)
WRITE !,$LENGTH(nstr)," unpacked characters: ",nstr
以下の例は、string を検証してからパックします。
SET str=$CHAR(65,66,67,68)
IF $ZISWIDE(str) {
WRITE !,str," contains wide characters"
QUIT }
ELSEIF $LENGTH(str) # 2 {
WRITE !,str," contains an odd number of characters"
QUIT }
ELSE {
WRITE !,str," passes validation" }
WRITE !,$LENGTH(str)," characters: ",str
SET wstr=$ZWPACK(str)
WRITE !,$LENGTH(wstr)," packed characters: ",wstr
ZZDUMP wstr