• 締切済み

vbでバイナリ書き込み

Visual Basic6.0で作成したソフトの オプション等の設定をテキストファイルに 書き込んでいるのですが、 メモ帳で内容を確認・変更出来るので それが出来ないようにしたいので 以下のようにコードを書いたのですが メモ帳で確認するとA B C B0D0F0となり 一部の文字が解ってしまいます メモ帳で確認・変更出来ないように書き込む事 (技と文字化けにする)や作成したソフトでしか 確認・変更が出来ないような事が出来るのでしょうか? Dim bytTxt() As Byte bytTxt = "ABCあいう" Open "Sample.dat" For Binary As #1  Put #1, , bytTxt Close #1

noname#185804
noname#185804

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

> 技と文字化けにする ビット反転するとか。 本格的に暗号化するのであれば、rijn.dll(フリーの暗号化DLL)がお勧め。

noname#185804
質問者

お礼

ご回答ありがとうございました。 参考にさせて頂きました。

noname#185804
質問者

補足

ご回答ありがとうございます ビット反転や暗号化以外の方法はございますでしょうか?

関連するQ&A

  • VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいの

    VB(VBA)で、バイナリデータを使ってテキストファイルを作成したいのですが、 例えば、"A"が一文字のみのShift-JIS もしくはunicodeのテキストファイルを作るため、 (下記の確認はShift-jis で行っています。) Dim ByteData As Byte ByteData = AscW("A") Open "C:\A.txt" For Binary Access Write As #1 Put #1, 1, ByteData Close #1 としました。 できあがったファイルをバイナリエディタで確認すると、  41 となっています。 (Unicode は 41 00 2バイト文字でリトルエンディアンのため) この41は、"A" の文字コード(Shift-JIS)「65」の16進表記です。 この「41」という値を使ってバイナリモードでテキストファイルを作成したいのですが、 どのようにすればよいでしょうか? 上記 Put #1, 1, ByteData の部分を、 1.Put #1, 1, 41 としたところ、通常表示はできないファイルができあがったみたいです。 バイナリモードで 「29 00 20 20」でした。 文字コード00 に該当する文字がないためだと思います。 2.Put #1, 1, "41" としたところ、「41 」(バイナリモードで 「34 31 20 20」) (41の後ろは半角空白) で×でした。 3.Put #1, 1, CLng("&H" & 41) としたところ、通常表示はできないファイルができあがったみたいです。 バイナリモードで 「41 00 00 00」でした。 4.ByteData = CLng("&H" & 41) Put #1, 1, ByteData これでやっとできました。 この他にも方法があるのか?と思い、質問させていただきました。 ご指導よろしくお願いいたします。

  • VB2010 COMポートからのバイナリ受信

    オシロスコープからの画像データ(40kバイト程度のtifファイル)をPCのCOMポートから受信し 保存するプログラムを作成しているのですが、受信データを正しくPC上に保存できません。 具体的には下記のコードでtifファイルは作成されますが、容量が数kバイトで明らかに不足 しています。 MsgBoxを有効にして受信バッファサイズや書込み長さを確認しましたが、「OK」ボタンを押す たびに下記の表示になります。COMポートのバッファサイズが4096バイトなので「dat.Length」 をすべて足し合わせると本来の受信データサイズになると思うのですが、PC上に作成された ファイル容量から「dat」が常に上書きされているような気がします。 正しく保存するにはどのような修正が必要でしょうか? 【MsgBoxを有効にしたときの表示値(OKを押すたびに数値が変わる)】 「dat.Length」 183 4075 4072 4092 4088 4084 4085 4092 4059 4078 3910 0 0 ・ ・ ・ 「ByteToRead」 4060 1508 324 908 2334 1785 70 227 400 0 0 ・ ・ ・ 【作成したコード】 Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As_ System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived ' シリアルポートからデータ受信 Dim dat As Byte() = New Byte(SerialPort1.BytesToRead - 1) {} SerialPort1.Read(dat, 0, dat.GetLength(0)) 'MessageBox.Show(dat.Length) 'MessageBox.Show(SerialPort1.BytesToRead) File.WriteAllBytes("C:\test1.tif", dat) SerialPort1.DiscardInBuffer() End Sub 【環境】 OS:Win7 VB:2010 ポート設定:SerialPortクラス標準からポート番号以外は変更なし

  • バイナリデーター内の文字を検索

    現在、以下のようなプログラムでバイナリファイルを読込んでいるのですが、そのデーターの中にある文字列の位置を検索したいのですが何かよい方法は無いでしょうか、for ~ next で廻すと一応はできますが、もう少し簡単な方法を探しています。 -------- Dim xBIN() As Byte Dim lngFileLenB As Long lngFileLenB = FileLen("バイナリ.BIN") Open "バイナリ.BIN" For Binary As #1 Get #1, , xBIN ' For i = 0 To lngFileLenB If IJP_DAT1(i) = CLng("&H" & "20") Then stop end if next i ---------- よろしくお願いします。

  • 教えてください。VBでのバイナリデータ。

    EUCコードで作成されたlndatファイルをオープンし、 コード変換するプログラムを作っています。 データの所得時にHexを使っているのですが、 所得データが 000000000000000000220801011200012000 となっています。 元データは 000000000000000000000000000000000000220080010001012000000120000000000000 なため、この様に所得したいのですが、上手く所得できません。 こういったデータの所得は可能なのでしょうか? また、自分の作成したソース自体にバグがあるのでしょうか? よろしかったら教えてください。 >>以下ソース Dim Data As Byte     '所得データ(1バイトごと) Dim Data_A As Variant 'ファイルから所得したデータ(ALL) Dim I As Long 'カウンター Dim File_Name As String 'ファイル名 Dim Filnm As Long 'ファイル番号 I = 1 Data_A = "" Filnm = FreeFile File_Name = "AA.lndat" Open App.Path & File_Name For Binary As #Filnm Do While EOF(Filnm) = False Get #Filnm, I, Data Data_A = Data_A & Hex(Data) I = I + 1 Loop Close #Filnm >>開発環境 VB5.0(SP3) Win2000 フリーのDLL等は使用不可能とお考え下さい。

  • Fortranの'read'のVBへの書き換え方

    Fortranのread/writeをVBへの書き換え方を教えて下さい。 他の方の作られたfortran.90のprogramをvisual basicに書きなおす作業をしています。その中の下記のfileのaccessが上手出来ません。このなかに有るbinary,とかbig_endianが原因のようです。 (これの無いfile accessの箇所は問題なく出来ました。) program内でdataをfileに書込み保存して蓄積しているようで、後日このdataをreadして使うようになっていますので新しくfileを作り直すわけにもいきません。 いろいろとcodeを入れてみたが、結果は文字化けばかりで10日も費してしまいました。 binary,bigendianなどの理屈が判っていないのでどうしょうもないと感じました。 どうか下記のfortranをVisual Basicへの書き変え方をご教授お願いします。 REAL ShipDim(17) '読み込みの時   filename = 'c:\pbcal\pbcal\pushdata\'//'push04' open (3,file= filename, status='old', & & form='BINARY', convert='BIG_ENDIAN',err=930) DO 10 J= 1,17 read(3) shipDim(j) 10 CONTINUE      (中略)  '見やすいように簡略化しています。 CLOSE (3,STATUS='KEEP')   '書込みの時はopenは下記で、後readをwriteに変えただけです。 open (3,file= filename, status=pstatus,form='BINARY', convert='BIG_ENDIAN',err=940) VBでTRYしたことの一例     Dim dat() As Byte = New Byte(-1) {}   Dim sr As System.IO.Stream = Nothing   Dim br As System.IO.BinaryReader = Nothing Dim strf As String = filepath & "push04" 'filepathは適当にしている    sr = System.IO.File.Open(strf, _        System.IO.FileMode.Open, System.IO.FileAccess.Read) br = New System.IO.BinaryReader(sr) ReDim dat(sr.Length - 1) dat = br.ReadBytes(sr.Length)      dat に=572個の2-3桁の数字が入っています。encodingなどでためしてみたが文字化け     ばかりです。    (System.Text.Encoding.GetEncoding("****").GetString(dat) など)         どうかよろしくお願いします。

  • VBAでバイナリデータが上手く読めない。

    VBAでバイナリデータが上手く読めない。 もともとC言語でバイナリデータを加工していた事をVBAでやる事になったのですが、上手く読めない。 <VBA> Open inputFileName For Binary As #mFileNo のようにオープンして、 <VBA> Dim a(800) As Byte Get #1, , a のように記述すればC言語のように取得出来ると思ったのですが、上手く取得出来ません。 なんとなく分かった事ですが、800バイトの中に改行文字があった場合、そこまでを変数aに入れるようにすると出来そうなので、Getで改行コードがあった場合はそこまでを読み込むみたいな手段はありますでしょうか。inputだとデータがまったく見れませんでしたのでGetにて対応したいと思っています。 宜しくお願い致します。

  • DATファイルが読めません(VB・VBA)

    DATの読書きをしなくちゃいけない事になって 元のコードを元に書き出す事はできたのですが 読込みができなくて困っています。構造体の中に値を入れてるんですが msgboxで値を表示しても、空白しか返ってきません。 ネットでも検索してみたんですが、どこがおかしいの分からなくてお手上げです。 どなたか宜しければおかしい所を教えて下さい。 Type TEST_DAT  TEST_A as string * 1  TEST_B as string * 2  TEST_C as string * 3 End Type Sub a ()  Dim Dat as TEST_DAT  Dim Fn as integer  Fn = FreeFile  Open ThisWorkbook.path & "\Test.dat" For Random as #Fn Len = 6  Get #Fn , , Dat  Msgbox Dat.TEST_A  Msgbox Dat.TEST_B  Msgbox Dat.TEST_C  Close #Fn  End Sub Datファイルの方には、上の構造体を使ってPut #Fn,,Dat の様に書いて1行出力した物をそのまま使っています。 なので、データが無いって事はありません。 元のコードとネットで調べはしたのですが、上で問題無い様な気がして おかしい場所がさっぱりわかりません。エラー等は一切返ってきてません。 Msgbox Len(Dat.TEST_A)の様にすると1,2,3と帰って来るので 値が入ってないのが悪いとはわかるんですが…。

  • 配列の内容をファイルの書出す

    2次元配列のデーターを書出す方法で困っています。 プログラムを以下のようにして書出したいデーターは x(1,0 To 5) の内容だけ書出したいのですがPut #1,, をどの用に書けばよろしいでしょうか。 Dim x(5,5) as Byte OPEN "C:\AAA" for Binary as #1 Put #1,,xx おねがいします。

  • InetコントロールHTTPでバイナリファイルをサーバにPUTする。

    Inetコントロールを使用してHTTPでサーバ上にバイナリファイルを送信使用としています。 ExecuteメソッドのPUTを使用してみましたが、サーバ上のファイルサイズが0KBになってしまい、正常に送信されていません。 Dim bData() As Byte Dim intFile As Integer intFile = FreeFile() Open "D:\Temp\aaa.mdb" For Binary Access Read As #intFile ReDim bData(0 To LOF(intFile) - 1) 'ここでは、bDataに読み込めている。 Get #intFile, , bData Close #intFile Inet1.Execute "http://aaserver/files/aaa.mdb", "PUT", bData よろしくお願いします。

  • VB2005でバイト配列をコピーするには

    どなたかご教授下さい。 VB6で作成したプログラムをVB2005にコンバートしました。構造体からなる配列変数を一つの配列変数にコピー したいのですが、構造体の最初のメンバーだけ値が同じで以降の値は正しくセットされていませんでした。 どのように記述したらよいのでしょうか。またCopymMemory以外で良い方法があればご教授下さい。 よろしくお願い致します。 ===概略=== Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Byte, ByRef Source As Byte, ByVal Length As Short) 構造体定義 (コピー元) <StructLayout(LayoutKind.Sequential)>Structure ST_MOTO <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim byte_strTranCd() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> Dim byte_strTanSeq() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Dim byte_strTxtNo() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Dim byte_strTxtSeq() As Byte End Structure Dim A As ST_MOTO (コピー先) <StructLayout(LayoutKind.Sequential)> Structure ST_SAKI Dim lngrecLen As Integer 'データのLength <MarshalAs(UnmanagedType.ByValArray, SizeConst:=100)> Dim bytrecData() As Byte 'データ End Structure Dim B As ST_SAKI Call CopyMemory(B.bytrecData(0), A.byte_strTranCd(0), 14) 出力結果 '最初の構造体のメンバーの値は正しく設定されている B.bytrecData(0) =80    A.byte_strTranCd(0) =80 B.bytrecData(1) =50    A.byte_strTranCd(1) =50 B.bytrecData(2) =57    A.byte_strTranCd(2) =57 B.bytrecData(3) =50    A.byte_strTranCd(3) =50 'これ以降は正しくない。(VB6だと正しく設定されている) B.bytrecData(4) =0     A.byte_strTanSeq(0) =80 B.bytrecData(5) =0     A.byte_strTanSeq(1) =87 B.bytrecData(6) =0     A.byte_strTanSeq(2) =48 B.bytrecData(7) =0     A.byte_strTanSeq(3) =48 B.bytrecData(8) =6     A.byte_strTanSeq(4) =55     ・              ・     ・              ・

専門家に質問してみよう