VBでバイナリデータを16進数に変換するには、
どのような方法がありますか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

田吾作7です



16進数にするだけならHEXでできます。
バイナリデータをどういった形で変数に読み込んでるかがわからないために、的を得た回答ができません。
読み込む部分までのソースを記してもらえれば、以後どうするかを答えやすくなると思います。


全然回答になってないかもしれませんが、バイナリファイルを読み込む時のサンプルを記します。

Sub Main()
  Const testFile   As String = "C:\TESTFILE"
  
  Const ReadBufSize  As Long = 256  '読み込むバッファのサイズを指定
  
  Dim Buf()  As Byte   'バッファ
  Dim lngFile As Long   'ファイルナンバ
  
  Dim i    As Long

  lngFile = FreeFile
  Open testFile For Binary Access Read Shared As #lngFile
    ReDim Buf(ReadBufSize - 1)
    Get #lngFile, , Buf
  Close #lngFile
  
  '16進数にしてデバッグウィンドウに出力
  For i = 0 To (ReadBufSize - 1)
    Debug.Print Hex(Buf(i))
  Next i
End Sub
    • good
    • 0

バイナリデータ、16進数、共に文字列だと思うので、


自分で作成してしまいますね
(何か便利な関数があれば良いのですが・・・自分は知りません(T_T))
下記にサンプルを記しておきます

'~~~~~~~~~~
'1バイトのバイナリデータを16進に変換する
Private Function Byte01BinToHex(BinData As String) As String
Dim i As Integer
Dim n As Integer

'引数の文字数判断
If Len(BinData) = 8 Then

'変数初期化
i = 0

'1バイト分ループ
For n = 1 To 8 Step 1
'値を変数に加算
i = i + (CInt(Mid(BinData, 9 - n, 1)) * (2 ^ (n - 1)))
Next

'戻り値設定
Byte01BinToHex = Hex(i)

Else

'戻り値設定
Byte01BinToHex = "xx"

End If

End Function
'~~~~~~~~~~

頑張ってください
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB.NETで16進数+16進数や16進数*nをやる方法

16進数の計算で困っております。
以下のようなプログラムを作ろうと思っています。

入力1:
 元の数値:(16進数/型String/例「0000563A」)

入力2:
 加算数値:(16進数/型String/例「000001F5」)

入力3:
 加算倍率:(10進数/型Integer/例「3」)

結果
 入力1+(入力2*入力3)
 (結果 16進数/型String/例 00005C19)

このようなプログラムを打ちたいのですが、
 String=入力1+入力2
とやると、当然ながら「000001F53」と、ただ文字列として追加された計算になってしまいます。
どうやって計算すればよいのでしょうか?

Aベストアンサー

Imports System
Imports Microsoft.VisualBasic

Class Sample
Shared Sub Main()
Dim orgHNum as String = "0000563A"
Dim AddNum as String = "000001F5"
Dim k as Integer = 3
Dim result as String

result = Format(CInt(val("&h"+orgHNum) + val("&h"+addNum) * k),"X8")
Console.WriteLine(result)
End Sub
End Class

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html

QVB6.0で小数10進数を16進数に変換したい

仕事に生かせるようになる為、VB6.0を勉強しています。
今仕事でディジタル通信を用いて信号のやり取りをするような機器を使っているのですが、例えば小数じゃないですけど、10進数の「1」は16進数に変換すると「3F800000」となるみたいです。
どのようなプログラムを作ればこのような変換が行えるのでしょうか?
分かる方いらっしゃいましたら教えてください。

Aベストアンサー

http://www.hc.uec.ac.jp/~nagai/ip/note/note7.html
の解説を手掛かりに解説してみます。
私も勉強させてもらいました。やっと納得と言うところです。
左からのビット(列。24ビット。Realからくる。)を考える。
第1--符号(サイン)を表す1ビット。正は0、負は1
    この質問に出てくる、1は正で0。
第2ビットから第9ビットまで8ビット--指数部。
Exponent部。
    1は1.0×2の0乗であるから0000000    0であるはずだが、バイアス(Bias。#2の    ご回答に出てくる。)オッフセット値127=2    進数で1111111を加えるので、11111    11が指数部となります。
第10ビットから第24ビットまで---仮数部。 Mantissaと言う。仮数部は、1は2の1乗だから1のはずが、「仮数は先頭の1を省略し、」(上記サイトより学んだ)で0になる。
以上サインビット+指数ビット+仮数ビットを寄せ集めると0.01111111.000000000000000(.は区切りを判りやすく入れたもの)となり、左から16進のため4ビットずつとって
0011=3
1111=F
1000=8
0000=0以下同じ0.
で「3F800000」となります。
●「Baiasが127」と「仮数は先頭の1を省略し、」
の意味は、なんとなく掴めるのですが、知っていないと
どうにもならないところですね。
VBレベルでこの変換をするのは無意味(必要性はない)と思いますが、敢えてなさるのなら、上記ロジックを参考にしてVBで実現されては。Real型が出てくるのはPascal系か。浮動小数点数=Float型+Real型です。

http://www.hc.uec.ac.jp/~nagai/ip/note/note7.html
の解説を手掛かりに解説してみます。
私も勉強させてもらいました。やっと納得と言うところです。
左からのビット(列。24ビット。Realからくる。)を考える。
第1--符号(サイン)を表す1ビット。正は0、負は1
    この質問に出てくる、1は正で0。
第2ビットから第9ビットまで8ビット--指数部。
Exponent部。
    1は1.0×2の0乗であるから0000000    0であるはずだが、バイアス(Bias。#2の  ...続きを読む

QVB6.0でのバイナリデータの扱いについて

文字コードについて

現在ハンディターミナルとPCとの通信を行うプログラム(VB6.0)を作成しています。
    
プログラムの一部で下のような記述があります。

------------------
BCC = Chr(aa)
------------------

変数aaには数字の226が入り、変数BCCには226に該当する文字列が格納されるはずですが、BCCには文字化けした文字が入り困っています。
調べた結果VB6.0は文字列をunicodeとして扱い、その結果内部的な文字列変換が理由で、文字コード上に存在しない幾つかのバイナリデータは、Chr関数で扱えないというところまではわかりました。
そこでChr命令をChrB命令に変更しましたが、求めている答えが返ってきませんでした。
文字コード表では"DF"までは存在しますが、それ以降の文字は存在しないため扱うのは無理なのでしょうか?

StrConvなどを使用すれば可能なのかどうか等考えているのですがわからない状況です。
どなたかご教授願えないでしょうか。宜しくお願い致します。

文字コードについて

現在ハンディターミナルとPCとの通信を行うプログラム(VB6.0)を作成しています。
    
プログラムの一部で下のような記述があります。

------------------
BCC = Chr(aa)
------------------

変数aaには数字の226が入り、変数BCCには226に該当する文字列が格納されるはずですが、BCCには文字化けした文字が入り困っています。
調べた結果VB6.0は文字列をunicodeとして扱い、その結果内部的な文字列変換が理由で、文字コード上に存在しない幾つかのバイナリデータは...続きを読む

Aベストアンサー

String型は、Unicode(UTF-16)でデータが入ってくることが前提なので、
String型に対してChrB()、Chr()で非Unicode文字をセットしても解決にはなりません。
バイナリーデータは、String型は一切使用せずにバイト型配列で処理するのが基本です。

>BCCをbyte型とした場合、
>今度は問題なかった文字コードが文字化けする事や、
>かえってくる文字列がかわるような事はありませんか?
たとえ偶然であっても、他のうまくいっているString型の変数は、いじる必要はないわけですが、
もしBCCという変数で、その他のうまくいっている文字列を同時に扱っているのであればそうなるかもしれません。
(いままで暗黙のうちにUnicode⇔SJIS変換を行ってくれていた部分
を自前で処理する必要があります)
具体的には、
バイト型配列 = StrConv(String型変数, vbFromUnicode)
String型変数 = StrConv(バイト型配列, vbUnicode)
のような処理が必要でしょう。

String型は、Unicode(UTF-16)でデータが入ってくることが前提なので、
String型に対してChrB()、Chr()で非Unicode文字をセットしても解決にはなりません。
バイナリーデータは、String型は一切使用せずにバイト型配列で処理するのが基本です。

>BCCをbyte型とした場合、
>今度は問題なかった文字コードが文字化けする事や、
>かえってくる文字列がかわるような事はありませんか?
たとえ偶然であっても、他のうまくいっているString型の変数は、いじる必要はないわけですが、
もしBCCという変数で、そ...続きを読む

QVB6.0でのバイナリデータの扱いについて

現在ハンディターミナル(HT)とPCとの通信を行うプログラム(VB6.0)を作成しています。
このプログラムは元々VB2.0で作成されたものをベースとしてVB6.0で再作成しているものです。
プログラムの中でHTとPCとの通信エラーを防ぐため、データ行のBCCを計算しHTに送信している
部分があります。VB6.0ソースを下に表示します。
(実際は、計算したBCCをデータ(下のCheckString変数)の最終行にくっつけてHTに送信していますが、ここではBCCのみ送信しています)
-------------------------------------------------○VB6.0
/* 最初にBCCを計算して返し、HT側へ送信している */ /* BCCはstring */
Dim i As Integer, aa As Integer,BCC as String
aa = 0
For i = 1 To Len(CheckString)
aa = aa Xor Asc(Mid(CheckString, i, 1))
Next
BCC = Chr$(aa)
frmMain.MSComm1.InBufferCount = 0
frmMain.MSComm1.Output = BCC
------------------------------------------------
VB2.0ではAscB,LenB,MidBのところをVB6.0ではAscB,LenB,MidBをAsc,Len,Midへ変更しています。通常はこれで問題ありませんでしたが、BCCの計算の結果aa = 226となった場合にBCCに文字化けした"r"のような文字がはいっていました。プログラムの中でBCC変数をテキストへ吐き出し、バイナリエディタで確認しましたが"E2"となるところに"00"と空白となっており、これが原因でHTとPC間での通信が完了しません。
(テキスト送信時にStringのため文字化けが原因?)
前回の質問でSTRING型を使用せずにバイナリ型配列で処理する事や、いままで暗黙のうちにUnicode⇔SJIS変換を行ってくれていた部分をStrconvを使用し自前で処理しなければいけないというご指摘を受けたのですが、上のプログラムではどのように修正が必要なのでしょうか?どなたかご教授の程宜しくお願い致します。

現在ハンディターミナル(HT)とPCとの通信を行うプログラム(VB6.0)を作成しています。
このプログラムは元々VB2.0で作成されたものをベースとしてVB6.0で再作成しているものです。
プログラムの中でHTとPCとの通信エラーを防ぐため、データ行のBCCを計算しHTに送信している
部分があります。VB6.0ソースを下に表示します。
(実際は、計算したBCCをデータ(下のCheckString変数)の最終行にくっつけてHTに送信していますが、ここではBCCのみ送信しています)
----------------------------------...続きを読む

Aベストアンサー

BCC は As Byte で
BCC = ChrB(aa)

BCC = CByte(aa)
で。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報