プロが教える店舗&オフィスのセキュリティ対策術

こんにちわ。以下のプログラムを解読しているのですが、型変換がどう行われているのかがわからなくて困っています。
『←ココ!!』となっているところの型変換です。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)
******************

A 回答 (3件)

ぱっとみて、



Private Type bytP
bP(3) As Byte
End Type

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

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

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

この回答への補足

ありがとうございます!

Dim bytB(4) As Byte

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

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

補足日時:2006/02/27 16:12
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/28 09:09

いえいえ



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/techi …
にかいてあるとおり、
 
 またはユーザー定義型の変数を別のユーザー定義型変数にコピーします。

です。
C言語で言うところの memset と同じイメージですね。
ただなんでこんな面倒くさいことをしているのか意味不明です。

単に、
 long型変数P を 1byte ずつ bytB(0)->(3)へ入れているだけですから、ビット演算をしてしまえばこんなユーザ定義型など使わなくてもいいのに。

では。

この回答への補足

ありがとうございます!

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/28 09:08

LSet は、既に説明があるとおり、


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

ありがとうございます!

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

お礼日時:2006/02/28 09:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!