こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

この型変換の内容がわかりません(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)
******************

投稿日時 - 2006-02-27 15:37:46

QNo.1995218

困ってます

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

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

投稿日時 - 2006-02-27 21:01:24

お礼

ありがとうございます!

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

投稿日時 - 2006-02-28 09:07:48

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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)へ入れているだけですから、ビット演算をしてしまえばこんなユーザ定義型など使わなくてもいいのに。

では。

投稿日時 - 2006-02-27 17:08:30

補足

ありがとうございます!

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

投稿日時 - 2006-02-27 17:35:43

お礼

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

投稿日時 - 2006-02-28 09:08:52

ANo.1

ぱっとみて、

Private Type bytP
bP(3) As Byte
End Type

ですが、3->4ではありませんか?

その後の
 Dim bytB(4) As Byte
は4ですから。

抜粋ではなく、動くようなプログラムで載せてくれると検証しやすいのですが。

投稿日時 - 2006-02-27 15:55:24

補足

ありがとうございます!

Dim bytB(4) As Byte

Dim bytB(3) As Byte
ですね。人のプログラムを解読しています。

動くプログラムはめちゃくちゃ長いんです。
LSetの構造について教えていただければ光栄です。

投稿日時 - 2006-02-27 16:12:22

お礼

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

投稿日時 - 2006-02-28 09:09:10

あなたにオススメの質問