Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$ZWUNPACK と $ZWBUNPACK

1 つの 16 ビット文字を 2 つの 8 ビット文字にアンパックします。

Synopsis

$ZWUNPACK(string)

$ZWBUNPACK(string)

パラメータ

string 1 つ以上の 16 ビット文字で構成される文字列。

概要

$ZWUNPACK は 1 つ以上の 2 バイトのワイド文字を取得して、それらを “アンパック” し、対応するシングル・バイト文字のペアをリトル・エンディアン順に返します。

$ZWBUNPACK は同じタスクを実行しますが、2 バイトのワイド文字はビッグ・エンディアン順にアンパックされます。

文字列のパックは、格納する文字列の文字数と文字列操作を半分にするための方法です。アンパックすると、元の 8 ビット文字の文字列を表示するために復元されます。これらの操作は、データ内で Unicode 文字が許可されているときは使用しないでください。

入力 string は、$ZWPACK または $ZWBPACK を使用して作成された 16 ビットのワイド文字のみで構成される必要があります。空の文字列は許可され、空の文字列が返されます。string には、16 ビット Unicode 文字および 8 ビット文字を含めないでください。

string$ZISWIDE を使用して、マルチバイト文字が含まれているかを確認できます。ただし、文字列に 16 ビット文字と 8 ビット文字が混在していないことを確認するには、各文字に対して $ZISWIDE を使用する必要があります。$ZISWIDE は、Unicode とパックされた 16 ビット文字を区別しません。

以下の例は、Caché の Unicode インストールが必要です。

以下の例では、$ZWPACK を使用してパックされた文字列 (“ABCD”) をアンパックします。2 つの 16 ビットのワイド文字を 4 つの 8 ビット文字にアンパックします。パックした文字列のワイド文字では、バイト順序が 16 進数 4241 4443 のようにリトル・エンディアンになります。

   IF $SYSTEM.Version.IsUnicode() {
   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
   }
   ELSE {WRITE "This example requires a Unicode installation of Caché"}

以下の例は、前の例と同じ操作を実行しますが、ビッグ・エンディアン順序を使用します。パックした文字列のワイド文字では、バイト順序が 16 進数 4142 4344 のようにビッグ・エンディアンになります。

   IF $SYSTEM.Version.IsUnicode() {
   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
   }
   ELSE {WRITE "This example requires a Unicode installation of Caché"}

以下の例は、8 ビット文字の文字列を “アンパック” するときにどのようになるかを示しています。アンパック操作は、各文字が 16 ビットのワイド文字になることを前提にしています。したがって、不足している 8 ビットは 16 進数 00 として提供します。この $ZWUNPACK の使用は、お勧めしません。

   IF $SYSTEM.Version.IsUnicode() {
   SET str=$CHAR(65,66,67)
   WRITE !,$LENGTH(str)," characters: ",str
   SET nstr=$ZWUNPACK(str)
   WRITE !,$LENGTH(nstr)," unpacked characters:"
   ZZDUMP nstr
   }
   ELSE {WRITE "This example requires a Unicode installation of Caché"}

以下の例は、16 ビット Unicode 文字の文字列を “アンパック” するときにどのようになるかを示しています。この場合は、小文字のギリシャ文字です。この $ZWUNPACK の使用は、お勧めしません。

   IF $SYSTEM.Version.IsUnicode() {
   SET str=$CHAR(945,946,947)
   WRITE !,$LENGTH(str)," characters: ",str
   SET nstr=$ZWUNPACK(str)
   WRITE !,$LENGTH(nstr)," unpacked characters: ",nstr
   ZZDUMP nstr
   }
   ELSE {WRITE "This example requires a Unicode installation of Caché"}

関連項目

FeedbackOpens in a new tab