掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列型変数から無変換でバイナリファイルへ出力するには (ID:143200)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境:VB6 SP5 数日間にかけて過去ログを参照し寄せ集めのコードで試行錯誤しましたが、 PG歴も浅く解決には至らず・・・。ご教授いただきたいです。 やりたいことは、 テープ(CMT)に書かれているEBCDICコードのデータを読み出し、 バイナリレベルで同じ状態でファイルへ出力したいのです。 テープ装置からデータを抜き出す術はハードに添付のdllを使用しており、 String型で得ることができます。 取得した文字列をそのままBinaryモードでファイル出力をすると そのままではなくなり、バイト型?を頼りにいろいろ試しましたが、 お手上げ状態です。 以下ソースの抜粋です。 'DLL宣言部 'パラメータ: 'unsigned char mtid; … 装置番号 'const char *buff; … メモリアドレス 'unsigned short *count; … リードバイト数 'unsigned long bufflen; … データバッファサイズ Public Declare Function mtrblock Lib "HOGE.DLL" _ (ByVal MtId As Integer, ByVal buff As String, count As Integer, ByVal bufflen As Long) As Long '----------------------------------------------------------- '変数宣言部 Public mt_buffer As string * 32000 Public mt_count As Integer Public mt_bufflen As Long Public mt_rtn As Long ' '前半はテープ装置を使う前処理など mt_rtn = mtrblock(1 , mt_buffer , mt_count , mt_bufflen) '上記でmt_bufferにEBCDICコードのまま取得 '以降の処理で試行錯誤するも解決せず Dim バイト配列 As Byte 'バイト配列 = mt_buffer ←変換なしだと全く違う結果になる バイト配列 = StrConv(mt_buffer , vbFromUnicode) Open outFileName For Binary As #1 Put #1, , バイト配列 Close #1 結果はまったく違うわけではありませんが、 例えば以下のような差異が B5 5C E5 0C 48 00(テープ内の元ファイル) B5 5C 81 45 48 00(出力ファイル) dllのDecrare宣言は既存のアプリで使用しているためなるべく変更せず、 取得した文字列からそのまま出力する方法はないでしょうか。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.