トップ回答者
16進数:特定の範囲内かどうかをチェックする方法

質問
-
今までVB6でプログラム作成していたのでですが、VB2008に移行する事になり困っています。
下記はファイル読込部分です。
バイナリで全て読み込むのはVB6と同じです。
Dim Bd As Byte() = New Byte() {} Dim Sr As System.IO.Stream = Nothing Dim Br As System.IO.BinaryReader = Nothing Sr = System.IO.File.Open("C:\aaa.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read) Br = New System.IO.BinaryReader(Sr) Bd = New Byte(Sr.Length - 1) {} Br.Read(Bd, 0, Bd.Length) Br.Close()
下記は特定の範囲内かチェックする部分です。(VB6)
For i = i To UBound(ByteData) If Flag Then Select Case ByteData(i) Case &HD Exit For Case &H81 To &H9F, &HE0 To &HEA, &HF0 To &HF9 Flag = False Case Else Flag = True End Select Else Select Case CInt("&H" & Hex(ByteData(i - 1)) + Hex(ByteData(i))) Case &H8140 To &H84BE, _ &H8740 To &H879C, _ &H889F To &H9872, _ &H989F To &H9FFC, _ &HE040 To &HEAA4 Flag = True Case Else Exit For End Select End If Next i
これと全く同じ処理を作成したいのですが、どうすればよいでしょうか?
宜しくお願い致します。
回答
-
Option Strict が OFF なのかな?
省略されていますが、実質的には Character = CInt("&H" & Hex(... と書いたのと同様の動きになります。
.NET らしいコードで書くのであれば、BitConverter.ToInt16 を使うことかな。ところで、VB6 で Integer 型は 16 ビット符号付き整数型(-32768 ~ 32767)でしたが、VB.NET 以降では 32 ビット符号付き整数型に変わっています。
今の代入、Select Case レベルなら実害はありませんが、ほかにもコードを移植されるのであればお気をつけください。- 回答としてマーク hana0101 2012年8月8日 4:03
すべての返信
-
これと全く同じ処理を作成したいのですが、どうすればよいでしょうか?
念のため。
処理している内容を自分で説明できますか?
もし、説明できないというのであれば、ちゃんと VB6 の構文を押さえた上で実装の理解を優先してください。あるいは残された資料などから動きを理解してください。
それがなされていないと、コードが提供されたとしてあなたの目的に合致しているか検証できません。また、フォーラムはお互いの助け合いで成り立つものであり、仕事を頼む場所でも、丸投げする場所でもありません。
現状の内容(コードの説明が一切ない、コードの丸投げ)では、情報を得ることはかなわないかと思います。 -
Azulean様、ありがとうございます。
時間がなかった為、大変失礼な質問となってしまいました。
申し訳ありません。
念のため。
処理している内容を自分で説明できますか?
もし、説明できないというのであれば、ちゃんと VB6 の構文を押さえた上で実装の理解を優先してください。あるいは残された資料などから動きを理解してください。
それがなされていないと、コードが提供されたとしてあなたの目的に合致しているか検証できません。また、フォーラムはお互いの助け合いで成り立つものであり、仕事を頼む場所でも、丸投げする場所でもありません。
現状の内容(コードの説明が一切ない、コードの丸投げ)では、情報を得ることはかなわないかと思います。Azulean様の仰った事は十分わかっているつもりですが、今回の質問は丸投げしているようなものでした。
本当に申し訳ありませんでした。
今回の処理は下記の通りです。
・テキストファイルをバイナリで読込、1バイトずつコードをチェックする
・特定の範囲外の2バイト文字がきた場合はExitする
試した結果、ほとんど同じコードで動く事がわかりました。
ただ、↓の部分を
Select Case CInt("&H" & Hex(ByteData(i - 1)) + Hex(ByteData(i)))
↓のようにしたのですが、この部分だけが不安です。
Dim Character As Integer Character = "&H" & Hex(ByteData(i - 1)) & Hex(ByteData(i)) Select Case Character
動いているからこれで良いのか・・・。
- 編集済み hana0101 2012年8月7日 5:59
-
Option Strict が OFF なのかな?
省略されていますが、実質的には Character = CInt("&H" & Hex(... と書いたのと同様の動きになります。
.NET らしいコードで書くのであれば、BitConverter.ToInt16 を使うことかな。ところで、VB6 で Integer 型は 16 ビット符号付き整数型(-32768 ~ 32767)でしたが、VB.NET 以降では 32 ビット符号付き整数型に変わっています。
今の代入、Select Case レベルなら実害はありませんが、ほかにもコードを移植されるのであればお気をつけください。- 回答としてマーク hana0101 2012年8月8日 4:03
-
Azulean様、ありがとうございます。
Option Strict が OFF なのかな?
Option Strict は ON になっています。
ところで、VB6 で Integer 型は 16 ビット符号付き整数型(-32768 ~ 32767)でしたが、VB.NET 以降では 32 ビット符号付き整数型に変わっています。
今の代入、Select Case レベルなら実害はありませんが、ほかにもコードを移植されるのであればお気をつけください。
アドバイスありがとうございます。
これから気を付けます。
では、今回はこれで解決とさせて頂きます。