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

わんくま同盟

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

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

ツリー一括表示

数値データをバイト配列化する方法 /カルピス (19/12/20(Fri) 17:10) #93547
Re[1]: 数値データをバイト配列化する方法 /shu (19/12/20(Fri) 17:26) #93548
  └ Re[2]: 数値データをバイト配列化する方法 /Hongliang (19/12/20(Fri) 17:30) #93549
    └ Re[3]: 数値データをバイト配列化する方法 /カルピス (19/12/20(Fri) 17:33) #93550 解決済み
      └ Re[4]: 数値データをバイト配列化する方法 /カルピス (19/12/20(Fri) 17:35) #93551
        └ Re[5]: 数値データをバイト配列化する方法 /Hongliang (19/12/20(Fri) 18:45) #93554
          └ Re[6]: 数値データをバイト配列化する方法 /PANG2 (19/12/21(Sat) 11:44) #93556
            └ Re[7]: 数値データをバイト配列化する方法 /カルピス (19/12/21(Sat) 20:35) #93557 解決済み


親記事 / ▼[ 93548 ]
■93547 / 親階層)  数値データをバイト配列化する方法
□投稿者/ カルピス (1回)-(2019/12/20(Fri) 17:10:34)

分類:[.NET 全般] 

数値データをバイナリデータとして保存したい場合、
以下のようにwriteを使って順番に出力することでできます。


        Using stream As Stream = New FileStream(OutPath, FileMode.Create)
            Using writer As New BinaryWriter(stream)

        writer.Write(123!)         
        writer.Write(456#)         
        writer.Write(789%)        

            End Using
        End Using


一方で、数値データをバイト配列に変換したい場合にはどうすれば良いですか?

BitConverter.GetBytes
でバイト配列を出力後に、
https://www.atmarkit.co.jp/ait/articles/1712/27/news018.html

このページのようにして
array1.CopyTo(newArray, 0)
を使って地道に
コピーして繋げていくしかないですか?

そうするとコードが長くなってしまい
非常に見づらいです。

もっとスマートな方法があれば教えてください。

[ □ Tree ] 返信 編集キー/

▲[ 93547 ] / ▼[ 93549 ]
■93548 / 1階層)  Re[1]: 数値データをバイト配列化する方法
□投稿者/ shu (1212回)-(2019/12/20(Fri) 17:26:58)
No93547 (カルピス さん) に返信

BinaryWriterで描いたファイルであれば
BinaryReaderで
ReadXXXXX (※XXXXは読み取る型による。integerであれば ReadInt32)
で取得すればよいです。


[ 親 93547 / □ Tree ] 返信 編集キー/

▲[ 93548 ] / ▼[ 93550 ]
■93549 / 2階層)  Re[2]: 数値データをバイト配列化する方法
□投稿者/ Hongliang (940回)-(2019/12/20(Fri) 17:30:07)
いまいち質問の意図を読み取れませんでしたが、こういうことでしょうか。

Dim stream As New MemoryStream
Using writer As New BinaryWriter(stream)
    writer.Write(123!)
    writer.Write(456#)
    writer.Write(789%)
End Using
Dim arr As Byte() = stream.ToArray()

[ 親 93547 / □ Tree ] 返信 編集キー/

▲[ 93549 ] / ▼[ 93551 ]
■93550 / 3階層)  Re[3]: 数値データをバイト配列化する方法
□投稿者/ カルピス (2回)-(2019/12/20(Fri) 17:33:42)
No93549 (Hongliang さん) に返信

どうもありがとうございます。
これでした。

解決済み
[ 親 93547 / □ Tree ] 返信 編集キー/

▲[ 93550 ] / ▼[ 93554 ]
■93551 / 4階層)  Re[4]: 数値データをバイト配列化する方法
□投稿者/ カルピス (3回)-(2019/12/20(Fri) 17:35:43)
ちなみに
stream As Stream = New FileStream(OutPath, FileMode.Create)

は最後にdisposeする必要がありますが、
stream As New MemoryStream
はdisposeしなくても良いのでしょうか?

[ 親 93547 / □ Tree ] 返信 編集キー/

▲[ 93551 ] / ▼[ 93556 ]
■93554 / 5階層)  Re[5]: 数値データをバイト配列化する方法
□投稿者/ Hongliang (941回)-(2019/12/20(Fri) 18:45:00)
BinaryWriter::Disposeは内部で自分が抱えているStreamのDisposeを行うので、あえてStreamの方のDisposeまで呼び出す必要はありません。
// New BinaryWriter(stream, encoding, leaveOpen)を使ってstreamのDisposeをさせないこともできます。
[ 親 93547 / □ Tree ] 返信 編集キー/

▲[ 93554 ] / ▼[ 93557 ]
■93556 / 6階層)  Re[6]: 数値データをバイト配列化する方法
□投稿者/ PANG2 (326回)-(2019/12/21(Sat) 11:44:48)
No93554 (Hongliang さん) に返信
> BinaryWriter::Disposeは内部で自分が抱えているStreamのDisposeを行うので、
DisposeではなくCloseでは?

Dim arr As Byte() = stream.ToArray()
の後にstream.Disposeするか、宣言でusingを使うのがよいでしょう。
[ 親 93547 / □ Tree ] 返信 編集キー/

▲[ 93556 ] / 返信無し
■93557 / 7階層)  Re[7]: 数値データをバイト配列化する方法
□投稿者/ カルピス (5回)-(2019/12/21(Sat) 20:35:20)
そういうことでしたか
どうもありがとうございました。
解決済み
[ 親 93547 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -