|
≫ |
|
|
|
HP OpenVMS DCL ディクショナリ
F$CVSI
文字列データからビット・フィールドを取り出し,その結果を符号付き値として整数に変換します。
形式
F$CVSI (開始ビット,ビット数,文字列)
戻り値
取り出したビット・フィールドを符号付き値として変換した整数
引数
開始ビット取り出される最初のビットのオフセットを指定します。オフセットは,文字列の下位(右端)ビットを位置番号 0 として判断します。オフセットは整数式として指定します。
負の値を持つ式を指定した場合や,文字列のビット数を越える値を持つ式を指定した場合には, DCL は INVRANGEというエラー・メッセージを表示します。
ビット数整数値に変換するために取り出されるビットの長さを指定します文字列のビット数以下でなければなりません。
負の値を持つ式を指定した場合や,ビット位置オフセットに加算したときに,値が無効になる式を指定した場合には, DCL は INVRANGE というエラー・メッセージを表示します。
文字列ビットが取り出される文字列を指定します。文字列は,文字列式として指定します。
例
#1 |
$ A[0,32] = %X2B
$ SHOW SYMBOL A
A = "+..."
$ X = F$CVSI(0,4,A)
$ SHOW SYMBOL X
X = -5 Hex = FFFFFFFB Octal = 177773
|
この例では,算術オーバーレイを使用して,2B という 16 進数を, A というシンボルの 32 ビットすべてに割り当てています。算術オーバレイについての詳細は,割り当て文 (=) の説明を参照してください。
シンボル A は未定義状態だったため,オーバレイが実行されたあと,このシンボルに文字列値が割り当てられます。シンボルが未定義の場合,算術オーバレイを実行すると,その結果として文字列値が割り当てられます。シンボルがすでに定義されている場合には,オーバレイを実行したあと,そのシンボルは,同じデータ・タイプのままです。 2B という 16 進数は,ASCIIのプラス記号(+) に対応します。
次に F$CVSI 関数は,シンボル A から下位4ビットを取り出します。下位4ビットには,B という 16 進数の 2進表現が含まれています。これらのビットが,符号付き値として整数に変換されます。変換後の値である -5 が,シンボル X に割り当てられます。
#2 |
$ SYM[0,32] = %X2A
$ SHOW SYMBOL SYM
SYM = "*..."
$ Y = F$CVSI(0,33,SYM)
%DCL-W-INVRANGE, field specification is out of bounds - check sign and size
$ SHOW SYMBOL Y
%DCL-W-UNDSYM, undefined symbol - check spelling
|
この例では F$CVSI 関数に指定された幅引数が大きすぎたため, DCL がエラー・メッセージを実行しシンボル Y に値を割り当てていません。
|