プロが教えるわが家の防犯対策術!

すいません、教えて下さい。
Byte型で読み込んだ内容を指定した固定長で出力したいです。
例えば、次のテキストファイルがあります。

【読み込み元.txt】
-------------------------------------------------------
ABC123
-------------------------------------------------------

文字コードをSJISとしてバイナリ値では「41 42 43 31 32 33」となります。
この値を次のように出力したいです。

【出力先.txt】(3バイト区切りとする)
-------------------------------------------------------
414243
313233
-------------------------------------------------------

なんとか自力で近しい?とこまで行けたのかなと思いますが
肝心の出力がうまくいきません。

【VB.Net】
-------------------------------------------------------
Dim BUFSIZE As Integer = 2048 ' 1度に処理するサイズ
Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ
Dim readSize As Integer ' Readメソッドで読み込んだバイト数
Dim srcName As String = "C:\Temp\A.txt" ' 読み込み元
Dim detName As String = "C:\Temp\B.txt" ' 出力先

' 処理開始
Using src As New FileStream(srcName, FileMode.Open, FileAccess.Read)
Using dest As New FileStream(destName, FileMode.Create, FileAccess.Write)
While True

' 読み込み
readSize = src.Read(buf, 0, BUFSIZE)

' 読み込むものが無ければ終了
If readSize = 0 Then Exit While

' 直接16進数を指定固定長で書き込みしたい部分
For i As Integer = 0 To readSize - 1
msgbox buf(i)
Next

' 書き込み実行
dest.Write(buf, 0, readSize)

End While
End Using
End Using
-------------------------------------------------------

大変お手数ですがご教示頂ければと思います。

A 回答 (2件)

入力ファイルの各バイトを


ただ単純に16進数表記で出力するプログラムです。
適当に改造すれば目的のこともできるでしょう。

========================================
' インデントに全角空白を使っています。要削除。

Class Bin2HexText
 Shared Sub main(ByVal args As String())

  Dim srcName As String = args(0) ' 入力ファイル名
  Dim destName As String = args(1) ' 出力ファイル名

  Dim BUFSIZE As Integer = 2048 ' 1度に処理するサイズ
  Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ

  Dim readSize As Integer ' Readメソッドで読み込んだバイト数

  Using src As New System.IO.FileStream( _
    srcName, System.IO.FileMode.Open, System.IO.FileAccess.Read)
   ' 出力ファイルはテキストファイルとして扱う
   Using dest As New System.IO.StreamWriter( _
     destName, False, System.Text.Encoding.GetEncoding("shift_jis"))

    While True
     readSize = src.Read(buf, 0, BUFSIZE) ' 読み込み

     If readSize = 0 Then
      Exit While ' 完了
     End If

     For i As Integer = 0 To readSize - 1
       ' Byte型数値を16進数表記(文字列)に変換して出力
       dest.Write( String.Format("{0:X2} ", buf(i)) )
     Next

    End While
   End Using
  End Using
 End Sub
End Class
    • good
    • 0
この回答へのお礼

とてもわかりやすい回答ありがとうございました!
まじうれしーーーーーーーーw
さんくすうー^^

お礼日時:2014/05/27 09:37

「固定長」とありますが、「1行が6文字のテキストファイル」ということでよろしいですか?


それなら、次の方法でよいのでは。

ToString、format等で Byte→2文字の16進数文字列にする

3つ分出力したら、改行を出力する

http://msdn.microsoft.com/ja-jp/library/dwhawy9k …

この回答への補足

試しにAの文字列をbyte型に直して10進「65」を6と5にばらして
今度は6,5のそれぞれのbyteを取得する事が出来たんですけど
それをどうやってbufへ格納してファイルに書き出して良いのかわかんないです、、、。
-----------------------
' Byte書き込み
For i As Integer = 0 To readSize - 1

n = buf(i)

For j As Integer = 1 To Len(n)
MsgBox(Asc(Mid(n, j, 1)))
Next

Next
-----------------------

補足日時:2014/05/23 10:58
    • good
    • 0
この回答へのお礼

すいませんちょっとよくわかんないです。

お礼日時:2014/05/23 08:32

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