none
【C#】Byte型リストへ変数の値を追加する RRS feed

  • 質問

  • List<byte> testL = new List<byte>();

    というバイト型のリストがあった時、

    byte[]型のdata、string型のtel、int型のID、DataTime型のWTime

    はどのようにしてリストに追加すればよいのでしょうか?

    2018年9月10日 4:25

回答

  • まず、あらゆるシステムが暗黙に了解するあらゆる型のByte型表現というものは存在しません。

    整数型にしたって、リトルエンディアンやビッグエンディアンなど複数の表現方法があります。文字列型では文字集合や文字符号化方式はたくさん存在しますし、日付時刻型はライブラリ単位でデータの持ち方すら異なります。

    それぞれの型をどうByte型で表現するか、そして他にも値と値の区切りはどうするのかとか、その値の型をどう表現するのかとか、そういった仕様(プロトコル)の部分がご質問には欠落しており、その仕様が提示されないと回答しようがありません。

    送信する側も受信する側も.NETで自作です、というのなら、上記のような部分を考えなくてもよい方法もライブラリが提供していますが。

    • 回答としてマーク chmod_777 2018年9月10日 5:11
    2018年9月10日 5:09

すべての返信

  • ご質問の真意がはっきり見えないのですが、byte[]型のdata、string型のtel、int型のID、DataTime型のWTimeをメンバーに持つクラスを定義し、それをListに追加するということで解決できますか?
    ちなみにbyte型のListには、ご質問で言われているようないろいろな型を追加することはできません。


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2018年9月10日 4:39
    モデレータ
  • byte型のリストに、該当する変数をByte変換して、追加するつもりです。

    (具体的なやり方がよくわかりません)

    2018年9月10日 4:43
  • List<byte> ではなくて List<object> ではないのですか?

    そもそもの目的は何でしょう? XY 問題に陥ってないですか?
    2018年9月10日 4:45
  • そもそもの目的としては、

    「int型の変数、String型の変数、byte配列型の変数、DateTime型の変数 をすべてbyte型リストに追加し、配列へ変換して伝送する」ことです。

    2018年9月10日 4:49
  • > 「int型の変数、String型の変数、byte配列型の変数、DateTime型の変数 をすべてbyte型リストに追加し、配列へ変換して伝送する」ことです。

    そのようなこと(「リストに追加」も「配列へ変換して伝送」も)は、普通に考えて不可能と思うのですが。

    失礼ながら、完全に的外れなことを考えておられるような気がします。

    int 型、String 型、byte[] 型、DateTime 型のデータを何らかの形にシリアル化する? 何の目的ですか?
    • 編集済み SurferOnWww 2018年9月10日 5:09 訂正
    2018年9月10日 5:09
  • まず、あらゆるシステムが暗黙に了解するあらゆる型のByte型表現というものは存在しません。

    整数型にしたって、リトルエンディアンやビッグエンディアンなど複数の表現方法があります。文字列型では文字集合や文字符号化方式はたくさん存在しますし、日付時刻型はライブラリ単位でデータの持ち方すら異なります。

    それぞれの型をどうByte型で表現するか、そして他にも値と値の区切りはどうするのかとか、その値の型をどう表現するのかとか、そういった仕様(プロトコル)の部分がご質問には欠落しており、その仕様が提示されないと回答しようがありません。

    送信する側も受信する側も.NETで自作です、というのなら、上記のような部分を考えなくてもよい方法もライブラリが提供していますが。

    • 回答としてマーク chmod_777 2018年9月10日 5:11
    2018年9月10日 5:09
  • とりあえず、「バイナリ シリアル化」。.NET Framework どうしならこれ。

    相手が .NET Framework 以外なら、
    int 型なら、8ビットずつマスクしてシフトすれば byte 配列に取り出せるよね、ってことで。
    string 型は、Encoding 使って byte 配列にできるよね。ただし、終端をどうするかは考えないといけない。

    >> 「int型の変数、String型の変数、byte配列型の変数、DateTime型の変数 をすべてbyte型リストに追加し、配列へ変換して伝送する」ことです。
    そのようなこと(「リストに追加」も「配列へ変換して伝送」も)は、普通に考えて不可能と思うのですが。

    int、string、Bitmap のインスタンスを byte 配列にして、List<byte> に AddRange メソッドで追加していって、最後に ToArray メソッドで byte 配列にして Stream.Write メソッドで送信しているので、まぁ、不可能ではない。面倒だけど。

    なんにしても、他の所に書いたように、またここで Hongliangさんが書かれているように、まずは仕様を決めてください。


    Jitta@わんくま同盟

    2018年9月10日 13:50