私はこれまでの問題の答えを見てきましたが、まだ固執しています。私は収集し、ushortの配列を含む構造体の3つの配列を処理する必要があります。配列を含む構造体の配列
Error 1 'Wvsamps.wav1': cannot have instance field initializers in structs C:\Users\Hewitt\Desktop\C# Projects\MarshalBytesToStruct\LoadSamps.cs 8 11 MarshalBytesToStruct
私は、その後アクセスし、自分のメインプログラムクラスから構造体の私の配列に値を入れたいと思います:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
struct Wvsamps
{
ushort[] wav1 = new ushort[3];
ushort[] wav2 = new ushort[3];
ushort[] wav3 = new ushort[3];
ushort[] wav4 = new ushort[3];
ushort modes;
uint time;
ushort chkSum;
}
namespace ConsoleApplication1
{
public class LoadSamps
{
Wvsamps[] ldSamps = new Wvsamps[0x800000];
}
}
コンパイラはエラーを与える:私は私の構造体を保持するクラスを作りました。私はWindowsフォームアプリケーションでこれを行うためのハンドルを取得しようとするコンソールアプリケーションとしてこれをやっています。
私の問題を拡大するために、ネットワーク接続で1秒あたり32バイトのパケットを受信します。私は私のオリジナルのポストに示すようにWvsamps構造体の配列でそれらを配置する必要があり、これらの32個のバイトのパケットを受信すると
0x94, 0xa5, 0xca, 0x62, 0x41, 0x28, 0x4c, 0x93, 0x09, 0x42, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x04, 0x01, 0x40, 0x10, 0x00, 0x00, 0x70, 0x0d, 0x58, 0x3e, 0xc6, 0xd1, 0x07,
:32バイトのパケットの実際のデータは次のようになります。理想的には、Wvsamps構造体は32バイト長です。これの古いC/C++組み込みソリューションでは、32バイトのネットワークパケットをldSamps配列のWvsamps構造体にmemcpyでき、次に受け取ったパケットのldSamps配列の次の利用可能なWvsamps構造体を指すようにldSamps配列インデックスをインクリメントしました。私はldSamps配列の0x40000分のWvsamps構造体を累積する必要がありますので、配列は0x40000 Wvsamps構造体にする必要があります。
私は波形をWinFormにプロットするためにldSamps配列からWvsamps構造体にアクセスし、波形をスクロールして(少なくともハードコードされたシミュレーションデータで動作するようにしています)、測定を行います。また、私が受け取っているデータがBig Endian形式で来て、Wvsamps構造体のLittle Endianに変換して格納する必要があるという追加の問題があります。
'Wvsamps'をクラスにして、問題がなくなります。あなたが構造体が必要だと思った特別な理由は何ですか? –
過去のCプログラミングから解決策を動かそうとしています。各構造体は1秒分のWvsampを表し、72時間以上で最大8メガバイトを収集する必要があります。私はいくつかのコードを残し、Wvsamps構造体の3つのldSamps配列を宣言する必要があります。各8Megのサイズです。私はLoadSampsをクラスにすることでこれを行う必要があると思っていました。 –
最新のマシンでは、扱っているオブジェクトのサイズに問題はありません。クラスを使用するだけで、初期化が可能になります。 –