C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: バイト配列を構造体に取得する方法


(過去ログ 135 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■79773 / inTopicNo.1)  バイト配列を構造体に取得する方法
  
□投稿者/ ひろこ (1回)-(2016/05/14(Sat) 16:13:05)

分類:[VB.NET/VB2005 以降] 

2016/05/14(Sat) 16:24:28 編集(投稿者)
お世話になります。

環境 VB.NET 2010

バイト配列を構造体に取得する方法を教えてもらえないでしょうか。


処理1は成功しています。
処理2のBの処理で悩んでいます。


■処理1
@構造体にデータを設定して、バイナリ―ファイルに出力(FilePut)
Aバイナリファイルを構造体に読み込み(FileGet)

■処理2
@構造体にデータを設定して、バイナリ―ファイルに出力(FilePut)
Aバイナリ―ファイルをリソースにする
   (My Project→リソースの追加→既存ファイルの追加)
BリソースファイルをByte()で読み込んだものを構造体にセットしたい。



バイナリ―ファイルだけの出力と読込の構造体セットはできたのですが、
バイナリ―ファイルをリソース化(Byte化)にしてそれを構造体に
読み込みしたいのです。
下記関数を作成していただける方お願いできないでしょうか。
Call ByteToKouzoutai(testdat, data_r)


ご教授の程よろしくお願いします。



Structure MyData
    Public Nen    As String
    Public Tuki   As String
    Public Hi     As String
    Public Ptn()  As Integer
End Structure


Public Class Form1

Dim path     As String = "c:\test.dat"

'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
'■バイナリ―ファイルを作成
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Private Sub Button1_Click( sender As System.Object,  e As System.EventArgs) Handles Button1.Click
    DataWrite()
End Sub
'===バイナリ―ファイル書き込み=============================================    
Private Sub DataWrite()
    Dim data_w   As MyData
    Dim ptn(5)   As Integer

   ptn(0) = 1
    ptn(1) = 2
    ptn(2) = 3
  
    data_w.Nen      = "2016"
    data_w.Tuki     = "05"
    data_w.Hi       = "03"
    data_w.Ptn      = ptn

    Dim n as Integer = FreeFile()
    FileOpen(n, path, OpenMode.Binary)
    FilePut(n, data_w)
    FileClose(n)
End Sub

'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
'■バイナリ―ファイルを読み込み
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Private Sub Button2_Click( sender As System.Object,  e As System.EventArgs) Handles Button2.Click
    DataRead_File()
    DataRead_Resource()
End Sub
'===読み込み(ファイル)=============================================    
Private Sub DataRead_File()
    Dim data_r   as New MyData
    Dim n        as Integer = FreeFile()

    FileOpen(n, path, OpenMode.Binary, OpenAccess.Read, OpenShare.LockWrite)
    FileGet(n, data_r)
    FileClose(n)

End Sub
'===読み込み(リソース)=============================================    
Private Sub DataRead_Resource()
    Dim data_r   as New MyData
    Dim testdat  As Byte() = My.Resources.test

    Call ByteToKouzoutai(testdat, data_r) ←●この関数を作成したい

End Sub

End Class

引用返信 編集キー/
■79774 / inTopicNo.2)  Re[1]: バイト配列を構造体に取得する方法
□投稿者/ 魔界の仮面弁士 (702回)-(2016/05/14(Sat) 18:04:23)
2016/05/14(Sat) 18:04:47 編集(投稿者)

No79773 (ひろこ さん) に返信
> バイト配列を構造体に取得する方法を教えてもらえないでしょうか。

手抜き実装なら、一時ファイルに File.WriteAllBytes してから
FileGet するという手が使えるかと思います。


> 構造体にデータを設定して、バイナリ―ファイルに出力(FilePut)
> バイナリ―ファイルをリソースにする
リソースファイルは ReadOnly なデータですよね。だとすれば、
FilePut/FileGet 互換に拘らないほうが良いと思いますよ。

リソースとして埋め込むことのみを目的としているのであれば、
そのバイナリ形式が FilePut 互換になっている必要は無く、
シリアライズするだけで十分かと。

http://smdn.jp/programming/netfx/serialization/1_formatter/
http://dobon.net/vb/dotnet/file/binaryformatter.html
引用返信 編集キー/
■79836 / inTopicNo.3)  Re[2]: バイト配列を構造体に取得する方法
□投稿者/ ひろこ (2回)-(2016/05/19(Thu) 10:56:31)
魔界の仮面弁士様

回答ありがとうございます。

シリアライズの方も試してみましたが

FilePutしたものをFileGet以外で取得する場合は
バイナリデータの解析を自身でやらなければ
ならないことがわかりました。

バイナリ出力の所から考えなおしてみたいと
思います。
ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -