問題タブ [bitconverter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1076 参照

c# - C# BitConverter エラー

C# プログラムを起動しようとするとエラーが発生します (プログラミングがあまり得意ではないので、非常に簡単な言葉で答えを書いていただければ幸いです)

ここにエラーの写真があります - http://prntscr.com/7s2uq9

エラーは、「型または名前空間名 'GetBytes' は名前空間 'BitConverter' に存在しません (アセンブリ参照がありませんか?)」

私はすでにこれらを試し
ました-コード
を書き換えます-上部の名前空間参照を書き換えます(http://prntscr.com/7s2vf6

私の「参照の使用は」-

0 投票する
2 に答える
497 参照

c# - Objective-cでショートをバイト配列に変換する方法は?

C# では、このように byteArray に変換できます

これを C または Objective-C で実装したい

0 投票する
2 に答える
182 参照

c# - データ型をバイトから他の型にすばやく変換することにより、C# で 1 秒間に数千のパラメーターを処理する

私は過去 2 年間にわたってこの質問をしてきましたが、まだこれを行う良い方法を探しています。私がやっていることは次のとおりです。

過去 3 年間に開発された WPF/C# アプリケーションがあります。UDP ポート経由でバイトのリアルタイム ストリームが必要です。各レコード セットは 1000 バイトです。これらのバイト レコードを 1 秒あたり 100 件取得しています。データを読み取り、さまざまな形式で表示するために処理しています。これらの論理レコードは部分交換されます。

最初の 300 バイトは同じで、各論理レコードには Byte、Int16、UInt16、Int32、および UInt32 の値が混在しています。これらの値の約 70% は、最終的に最下位ビットで乗算され、Double が作成されます。これらのパラメータは常に同じです。2 番目の 300 バイトは、Byte、Int16、UIn32、Int32、および UInt32 値の別の混合です。ここでも、これらの値の約 70% が LSB で乗算され、Double が作成されます。これらのパラメータも常に同じです。最後のセグメントは 400 バイトで、準交換されます。これは、レコードの最後の部分に 20 の異なる論理レコード形式のうちの 1 つが含まれていることを意味します。Type01...Type20データと呼んでいます。それがどれであるかを教えてくれる識別子バイトがあります。これらにも、変換が必要な Byte、Int、UInt データ値が含まれています。

現在、このデータを処理するために何百もの関数呼び出しを使用しています。各関数呼び出しは、1000 バイト配列をパラメーターとして受け取り、バイト配列内のパラメーターの開始位置へのオフセット (インデックス) を受け取ります。次に、BitConverter.ToXXX 呼び出しを使用してバイトを正しいデータ型に変換し、必要に応じて LSB を掛けて最終的なデータ値を作成し、それを返します。

ソースに基づいてデータ ストリームが変化するため、この処理を合理化しようとしています。たとえば、新しいデータ ソース (フィード) の 1 つは、最初の 300 バイトで約 20 個のパラメーターを変更し、2 番目の 300 バイトで約 24 個のパラメーターを変更し、最後にサブ交換された 400 バイト レコードでいくつかのパラメーターを変更します。

辞書に論理レコード番号 (データの型)、レコードへのオフセット、データの LSB、変換されるデータの型 (Int16、UInt32 など)、そして最後に出力型 ( Int32、Double など)。使用するBitConverter関数も含めて「動的にキャスト」することもできますか?

これは、テンプレート クラスとおそらくデリゲートを使用する演習のようですが、これを行う方法がわかりません。例のようなコードをいただければ幸いです。

データも記録されるので、再生は 2 倍速、4 倍速、8 倍速、16 倍速で実行できます。これらの速度で何千ものパラメーターを調べる方法について誰かがコメントする前に、それは人が考えるほど難しくありません。良い場合は緑の背景、悪い場合は赤など、いくつかのタイプのデータ。または、マップの位置 (LAT/LON) を経時的にプロットすると、興味深いイベントを見つけるための高速再生に非常に役立ちます。だからそれは可能です。

助けてくれてありがとう。

他の人が私がやろうとしていることを理解しているかどうかわからないので、ソースコードの小さなセグメントを投稿して、誰かがそれを改善できるかどうかを確認しようと思いました.

上で述べたように、データはバイト ストリームで提供されます。バイト配列で読み取られると、次のようになります。

最初の 2 バイトは、1 に等しい ushort です。これは、この特定のレコードのレコード タイプです。この数の範囲は 1 ~ 20 です。

次の 4 バイトは、453,455 に等しい uint です。この値は、10 分の 1 秒です。この場合の値は 12:35:45.5 です。これに到達するには、次のサブルーチンに対して次の呼び出しを行います。

次のデータ フィールドはソフトウェア バージョンで、この場合は 23 です。

次のデータ フィールドは、別の UInt16 のシステム ステータス ワードです。

16 ビットのいずれかが論理 1 に設定されている場合、Built-In-Test ステータス ビットは他のルーチンに渡されます。

バイト配列に格納されたデータを処理するために、文字通り 1,000 を超える個々のサブルーチンがあります。バイト配列は常に 1000 バイトの固定長です。最初の 6 バイトは常に同じ識別子と時刻です。その後、パラメータはフレームごとに異なります。

次のソフトウェア バージョン用に多くのパラメータを再定義するソフトウェアにいくつかの主要な変更が加えられます。古いバージョンのソフトウェアをサポートしなければならないので、ソフトウェアはさらに複雑になります。私の目標は、辞書検索を使用してデータを処理する方法を見つけることです。そうすれば、辞書を作成し、辞書を読んでデータの処理方法を知ることができます。おそらく、ループを使用してデータをコレクションにロードし、それを表示フィールドにバインドします。

このようなもの:

私の肝心な問題は、適切な関数をキャストまたは選択するためのパラメーター定義を取得することです。「辞書」を実際のデータ出力にリンクする方法が見つかりません

助けてくれてありがとう

0 投票する
3 に答える
81 参照

c# - 先頭にゼロを残して byte[] を展開する組み込み関数はありますか?

私はこのコードを持っています

幅が 12 の場合、4 ではなく 1 バイトが返されます。[12] の代わりに [0, 0, 0, 12] を出力するために、先頭に 0 を残して配列のサイズを変更する組み込み関数がありますか。

0 投票する
2 に答える
908 参照

delphi - Delphi の c# bitconverter と同等

Delphi に bitconverter.getbytes に相当するものはありますか?

https://msdn.microsoft.com/en-us/library/fk3sts66(v=vs.110).aspx

0 投票する
1 に答える
981 参照

c# - C#でtextbox.textプロパティの16進数文字列をBitConverter.GetBytesに16進数として渡す

たとえば、センサーから値を読み取り、2 つの 16 ビット 16 進数値を文字列形式 "417D" と "8380" で受け取ります。

C# で文字列を解析してバイト配列 ( 41,7D,83,80 ) に分割し、16 進数を維持する方法を見つけることができないようです。

次に、以下を使用して IEEE754 数値を 10 進数に変換し、正しいセンサー読み取り値を取得します。

txtFloatValue.Text = BitConverter.ToSingle(hex, 0).ToString();

以下のコードは機能しますが、値を 0x417D8380 ではなく 16 進配列として渡す必要があります。

アドバイスをいただければ幸いです。私はこれに間違った方法でアプローチしているかもしれませんが、IEEE754 変換はうまく機能します。

0 投票する
0 に答える
127 参照

vb.net - BitArray エンディアンは常に BitConverter エンディアンと一致しますか?

私のクラスが BitArray クラスと BitConverter クラスを使用している場合、両方のエンディアンは常に一致しますか?

BitConverter コンストラクターのドキュメントでは、使用されているアーキテクチャに依存することが明示的に言及されていますが (ほとんどの場合リトルエンディアンです)、BitArray(Byte) コンストラクターのドキュメントには次のように書かれています。

配列の最初のバイトはビット 0 から 7 を表し、2 番目のバイトはビット 8 から 15 を表し、以下同様です。

ただし、これは、たとえばBitArray.CopyTo()を使用するためにエンディアンスキームが保持されるかどうかを指定しません。

編集

これが問題になる可能性のある例は次のとおりです。

0 投票する
1 に答える
86 参照

c# - c# バイナリのシリアル化を改善する

私は現在、他のコードに基づいてコードを生成するプロジェクトに取り組んでいます。基本的に、プログラミング言語自体を DSL として使用します。

ジェネレーター ターゲットの 1 つは、バイナリ DataContractシリアライザーと、次のクラスの生成された ToBytes です。

これになります:

今でもこれは非常に高速です..のすべての使用を高速化する方法を探していますBuffer.BlockCopy(BitConverter.GetBytes. byte[]コンバージョンごとに新しいスモールを作成し、すでにbyte[]ポジションを持っているときにそれをコピーするのは、依然としてリソースの無駄のようです。

コードを改善する最善の方法はありますか?

更新: @adrianm のコメントに基づいて、foreach を配列の for ループに置き換え、if ステートメントで null 許容型をラップします。別のスレッドのように構造体を使用することは望ましくありません。クラスと [DataContract] 属性を使用したいと思います。また、Linux 準拠のために、WinApi を使用できません。

Update2:生成されたコードの残りを追加しました。コメントのおかげで、将来のバージョンが含まれます