• ベストアンサー

この型変換の内容がわかりません(LSet)

こんにちわ。以下のプログラムを解読しているのですが、型変換がどう行われているのかがわからなくて困っています。 『←ココ!!』となっているところの型変換です。PのLong型をByte型へ変換しているとは思うのですが、内容をみるとどうなってそうなったのかわからないのです。『←ココ!!』の後の値を見てみると、 bP.bP(3)は「0」 bP.bP(2)は「188」 bP.bP(1)は「97」 bP.bP(0)は「78」 となっています。LSetで「P:12345678」がどうなってこうなったのでしょうか? 教えていただけるとうれしいです。宜しくお願いしまっす。 ***プログラム*** ’宣言 Const P As Long =12345678 Private Type bytP bP(3) As Byte End Type Private Type lngP lP As Long End Type Dim bytB(4) As Byte ’mainの中 lP.lP = P LSet bP = lP 『←ココ!!』 bytB(0) = bP.bP(3) bytB(1) = bP.bP(2) bytB(2) = bP.bP(1) bytB(3) = bP.bP(0) ******************

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

LSet は、既に説明があるとおり、 ユーザー定義型のメモリ領域のコピー なんで 12345678 を16進表現にすると、00BC614Eですから 00=0 BC=188 61=97 4E=78 ですね。 やってることは、LongをByteに切り分けているということだと思います。 単に代入するだけでいいので楽ということでしょうね。 ちょうど、C言語で言うunion みたいな感じの使い方ですね。

oxox_monkey
質問者

お礼

ありがとうございます! そういうことですかっ!LSetの中身がよくわかりました。ありがとうございました!

その他の回答 (2)

回答No.2

いえいえ Dim bytB(4) As Byte が Dim bytB(3) As Byte ですね。 ではなく、 bP(3) As Byte を bP(4) As Byte です。 lset ですが、 http://www.microsoft.com/japan/msdn/vbasic/techinfo/upgrade/transition/default.asp にかいてあるとおり、    またはユーザー定義型の変数を別のユーザー定義型変数にコピーします。 です。 C言語で言うところの memset と同じイメージですね。 ただなんでこんな面倒くさいことをしているのか意味不明です。 単に、  long型変数P を 1byte ずつ bytB(0)->(3)へ入れているだけですから、ビット演算をしてしまえばこんなユーザ定義型など使わなくてもいいのに。 では。

oxox_monkey
質問者

お礼

ありがとうございました!

oxox_monkey
質問者

補足

ありがとうございます! bytB(0) = bP.bP(3) bytB(1) = bP.bP(2) bytB(2) = bP.bP(1) bytB(3) = bP.bP(0) で箱が4つだから3の間違いかな。と思ったのですが。。 LSetの意味は、memsetと聞いてなんとなくわかってきました。確かになんでこんなことをしているのか不思議ですね。

回答No.1

ぱっとみて、 Private Type bytP bP(3) As Byte End Type ですが、3->4ではありませんか? その後の  Dim bytB(4) As Byte は4ですから。 抜粋ではなく、動くようなプログラムで載せてくれると検証しやすいのですが。

oxox_monkey
質問者

お礼

ありがとうございました!

oxox_monkey
質問者

補足

ありがとうございます! Dim bytB(4) As Byte が Dim bytB(3) As Byte ですね。人のプログラムを解読しています。 動くプログラムはめちゃくちゃ長いんです。 LSetの構造について教えていただければ光栄です。

関連するQ&A