Lunatic Sol

IT Tips

Val 関数で16進数を10進数変換する際の注意点

2004-03-01 11:45:13 | LotusScript
久々に LotusScript ネタです。今日は16進数を10進数に変換したり、8進数を10進数に変換したり、結構便利に使える Val 関数の注意点。</p><p>Designer 6 Help などの Val 関数の例を読むと Val("&HFF") というような記述になっています。実際にこれの戻り値を見てみましょう。

Sub Initialize
    Msgbox Val("&HFF")
End Sub
256 という値が返って来ます。問題ないですね。では今度は同じような方法で 8000 という値を Val("&H8000") として結果を調べてください。また FFFF という値を Val("&HFFFF") として結果を調べてみてください。どういう結果が出てきましたか?

前者は -32768、後者は -1 という結果だったと思います。どうやら、符号付16ビット (Signed Short) 整数で変換した結果を返してしまうようです。これは恐らく、LotusScript の Integer データ型が -32768 から 32767 の符号付16ビット整数の範囲であるからかと思います。でも32ビット整数として扱いたい場合、これでは困ります。どうすればいいでしょうか?

Val 関数のヘルプをよく読むと、接尾辞に関する説明があります。これを使うのです。LotusScript の中で Long データ型にしてあげれば 8000 や FFFF も32ビット整数 (符号付) の範囲に入りますよね。Val 関数で 0x8000 を10進数に変換する際以下のような構文に直してみてください。

Sub Initialize
    Msgbox Val("&H8000&")
End Sub
32768 が返って来ましたよね?同様に FFFF でも試してみると 65535 が返されますよ。

最新の画像もっと見る