バイト配列から数値への変換を行いたいのですが、やり方が分かりません。
バイト配列は各種integer、single,byte等の各種データが格納されていて
います(いわゆる構造体です。)
ここから、例えば1〜2バイト目はinteger型の変数に格納、3〜6バイト目は
single型の変数に格納といったことをVB6.0で行いたいのです。
バイト配列を一旦バイナリファイルにしてから、TYPE RECORDを使って
GETでファイルを読み込めばやりたいことはできると思うのですが、
もっと良い方法を教えて下さい。
RtlMoveMemoryAPIを使いましょう。
Dim intValue As Integer
Dim sngValue As Single
Call RtlMoveMemory(intValue, bytArray(0), 2)
Call RtlMoveMemory(sngValue, bytArray(2), 4)
batchman 様
ありがとうございます。
RtlMoveMemoryというAPIは知りませんでした。
APIビューアやMSDNのキーワード検索ではこのAPIは出てきません。
MSDNのフリーワード検索ではヒットしました。
Public Declare Sub RtlMoveMemory Lib "kernel32" Alias "RtlMoveMemory"
(Destination As Any, Source As Any, ByVal Length As Long)
と宣言すれば良いのですね。
しかし、APIビューアやMSDNのキーワード検索で出ないのには何か訳があるのでしょうか。
RtlMoveMemoryではなく、CopyMemory や MoveMemory という
APIであれば、見つける事ができると思います。
CopyMemory等の関数定義を、ヘッダファイルやAPIビューワなどで
調べてみるとわかるかと思いますが、結局は、これらは
「RtlMoveMpery」という関数の別名(エイリアス)に過ぎないのです。
そのため、VBから利用さる際には、CopyMemoryなどのAPIをまとめて、
本来の名前(?)である「RtlMoveMemory」と呼ばれる事がよくあります。
一方、C言語などでは、ヘッダファイルによって、
「CopyMemory」などの別名が既に定義済みであるため、
元々の内部名である RtlMoveMemory という関数名で呼ばれることは、
(VBに比べると)さほど多く無いようです。
魔界の仮面弁士様
疑問に答えて頂きましてありがとうございました。
エイリアスなのですね。
ツイート | ![]() |