
こんにちわ。以下のプログラムを解読しているのですが、型変換がどう行われているのかがわからなくて困っています。
『←ココ!!』となっているところの型変換です。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)
******************
No.3ベストアンサー
- 回答日時:
LSet は、既に説明があるとおり、
ユーザー定義型のメモリ領域のコピー
なんで
12345678 を16進表現にすると、00BC614Eですから
00=0
BC=188
61=97
4E=78
ですね。
やってることは、LongをByteに切り分けているということだと思います。
単に代入するだけでいいので楽ということでしょうね。
ちょうど、C言語で言うunion みたいな感じの使い方ですね。
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/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と聞いてなんとなくわかってきました。確かになんでこんなことをしているのか不思議ですね。
No.1
- 回答日時:
ぱっとみて、
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の構造について教えていただければ光栄です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
VBAのプログラムで、DIAG = 1# ...
-
リッチテキストボックスの中身...
-
typedefをプログラム中で解除す...
-
C言語 構造体の中に共用体を定...
-
1バイトデータの読み出しについて
-
命名規則 VB 構造体
-
構造体のポインタにNULLが入らない
-
VBAの変数のデータ型を変更する...
-
日付チェック関数について
-
配列を使わずに、変数名を動的...
-
C# DataGridView のヘッダーセ...
-
Excelですべての組合せ(重複組...
-
ExcelVBAでのkernel32(64bit)
-
isalpha()関数について
-
Run-Time Check Failure #3とい...
-
allocってなんですか?
-
define で 配列
-
CStringからchar*への型変換に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
リッチテキストボックスの中身...
-
構造体のデータを丸ごとコピー...
-
構造体の初期化方法について
-
C言語 構造体の中に共用体を定...
-
構造体にする理由・利点・使用例
-
VBAの変数のデータ型を変更する...
-
命名規則 VB 構造体
-
VBAにてcolorindexを変数に格納...
-
aspでユーザー定義の構造体を作...
-
charとucharの違い
-
typedefをプログラム中で解除す...
-
long型のデータをバイト型の配...
-
構造体のポインタにNULLが入らない
-
値が代入されてない時
-
C++ 構造体の一括初期化 {0}
-
整数から16進数への変換 現在c...
-
関数の引数の順番の混乱を回避...
おすすめ情報