TCPの通信アプリケーションをて作成しています。
Recvbuff(1024) as byte
と定義した変数に受信したデータを格納し以下のような構造体に格納
したいのです。
構造体A
id as integer
Usercode as string
Username as string
Filename as string
このとき、共用体のような使いかたはVBではできないようなので
すが、このような場合
整数なら「Recvbuff(1) * 256 + Recvbuff(0)」のように計算する。
文字列なら必要な文字のみ切り取ってGetStringで変換する。
といった方法しかないのでしょうか。
環境は
VS2008
VB.NET
です。
No.2ベストアンサー
- 回答日時:
バッファ内に文字列がどんな状態で格納されているかにもよりますね。
固定長であれば、Marshalの力を借りればいけそうな気がします。
TCP通信とのことなので、可変長(NullCharで区切り)っぽいような・・・。これだとかなり厄介なことになりそう・・・。
面倒でも配列を読みながら切り分けしたほうがよいとは思います。
あえて茨の道を進むというのであれば下記はスルーで。
バイト配列から固定長の変数型を取り出すのはBitConverterで簡単にできます。
私なら、BinaryReaderを継承してReadStringを改造しますね。MemoryStreamに放り込んだ配列を先頭から順番にRead***していきます。
クラスとして作っておけば他にも流用できるので。
(というか実際にTCP通信のPG組むときにこの方法でやりました。)
参考意見として。
まさに御想像のとおり可変長のNullで区切りのデータをMarshalでなんとかしようと思いはまってしまいました。
配列を読みながら区切りわけするようにしました。
BinaryReaderを継承してReadStringを改造する方法にもトライしたい
と思います。
No.1
- 回答日時:
自分がうまく質問内容を取れているかわからんのだが,
>>このとき、共用体のような使いかたはVB.NETで
>出来る方法はないのか?
と解釈してみる。それでよければ…
検索してこんな記事を見つけるけど,あってるのか不安だ。
Use Interop Code and Overlap Fields with the Union Construct in VB.NET
http://www.developer.com/net/vb/article.php/3602 …
StructLayout属性というものを使う方法でしょうか。
確かにこのキーワードで検索すると同じような悩みを
持っている。というかVB.NETでも共用体のような使い方
をすることができるということですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Visual Basic(VBA) エクセルから、パワーポイントのスライドを複数作成する。 1 2022/07/08 09:40
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
【VBA】配列に数式を仕込む方法...
-
VBA listBoxについて
-
VBAでの100万行以上のデータの...
-
SUMPRODUCT関数を用いた最小値
-
エクセル 条件を指定した標準...
-
[エクセル]連続する指定範囲か...
-
配列の受け渡しについて
-
[VBA]改行入りのセルの値を配列...
-
読み込みで一行おきに配列に格納
-
ノーツのデータをVBScriptで取...
-
DataSetから、DataTableを取得...
-
Excel オートフィルタのリスト...
-
VBS 複数ファイル複数行を配列...
-
エクセルVBAで変数をセルに一行...
-
array関数で格納した配列の型を...
-
vba:一覧表から自動転記をしたい
-
.NET - 配列変数を省略可能の引...
-
スプレットシートのGetTextにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
SUMPRODUCT関数を用いた最小値
-
Excel VBA 配列の分割について
-
Excelのオートフィルタで抽出し...
-
VB6.0 ファイルの一括読込み
-
Excel オートフィルタのリスト...
-
VBAで指定期間の範囲を抽出し、...
おすすめ情報