バイト配列と数値を変換するには?

解決


H_N  2003-07-10 22:41:50  No: 107745

バイト配列から数値への変換を行いたいのですが、やり方が分かりません。
バイト配列は各種integer、single,byte等の各種データが格納されていて
います(いわゆる構造体です。)
ここから、例えば1〜2バイト目はinteger型の変数に格納、3〜6バイト目は
single型の変数に格納といったことをVB6.0で行いたいのです。

バイト配列を一旦バイナリファイルにしてから、TYPE RECORDを使って
GETでファイルを読み込めばやりたいことはできると思うのですが、
もっと良い方法を教えて下さい。


batchman  2003-07-11 17:59:37  No: 107746

RtlMoveMemoryAPIを使いましょう。

Dim intValue As Integer
Dim sngValue As Single

Call RtlMoveMemory(intValue, bytArray(0), 2)
Call RtlMoveMemory(sngValue, bytArray(2), 4)


H_N  2003-07-11 23:19:56  No: 107747

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のキーワード検索で出ないのには何か訳があるのでしょうか。


魔界の仮面弁士  2003-07-12 00:44:50  No: 107748

RtlMoveMemoryではなく、CopyMemory や MoveMemory という
APIであれば、見つける事ができると思います。

CopyMemory等の関数定義を、ヘッダファイルやAPIビューワなどで
調べてみるとわかるかと思いますが、結局は、これらは
「RtlMoveMpery」という関数の別名(エイリアス)に過ぎないのです。

そのため、VBから利用さる際には、CopyMemoryなどのAPIをまとめて、
本来の名前(?)である「RtlMoveMemory」と呼ばれる事がよくあります。

一方、C言語などでは、ヘッダファイルによって、
「CopyMemory」などの別名が既に定義済みであるため、
元々の内部名である RtlMoveMemory という関数名で呼ばれることは、
(VBに比べると)さほど多く無いようです。


H_N  2003-07-14 20:46:18  No: 107749

魔界の仮面弁士様
疑問に答えて頂きましてありがとうございました。
エイリアスなのですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加