問題タブ [bit-packing]

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 投票する
2 に答える
4184 参照

c# - C#を使用したビットパックデータの管理

私はビットパックされたメッセージを処理するTCPベースのアプリケーションに取り組んでいます。つまり、送受信されるメッセージはバイトアラインされていません。たとえば、3ビットはフィールド1を表し、19ビットはフィールド2を表します。私の質問は、バイトのセットを取り、それらのバイト内の任意の範囲のビットを設定/取得できるC#ライブラリを知っている人はいますか?私はC/C ++で同様のユーティリティを見て作成しましたが、100%C#ソリューションが必要であり、車輪の再発明をやり直したくありません。

BitArrayクラスを見てきましたが、任意の範囲のビットを参照することはできません。

0 投票する
5 に答える
980 参照

c - これよりも4バイトを3にパックするためのより良い方法は何ですか?

値の配列はすべて0〜63の範囲内にあり、値に必要なのは6ビットのみであり、追加の2ビットを使用して次の値の最初の2ビットを格納できるため、4バイトごとに3にパックできると判断しました。すぐ。

switchステートメントとnextbit変数(デバイスのようなステートマシン)を使用してパッキングを実行し、開始ビットを追跡する前に、これを実行したことはありません。しかし、私は確信していますが、もっと良い方法があるはずです。

提案/手がかりをお願いしますが、私の楽しみを台無しにしないでください;-)

ビッグ/リトルエンディアンに関する移植性の問題はありますか?

ところで:もう一度解凍して入力と比較することで、このコードが機能していることを確認しました。そして、それは宿題ではなく、私が自分で設定した運動にすぎません。

0 投票する
9 に答える
10586 参照

c++ - C++ データ メンバーのアライメントと配列のパッキング

コードレビュー中に、次のように単純な構造を定義するコードに出くわしました。

他の場所では、これらのオブジェクトの配列が定義されています。

その後、構造体はバッファーにそのままコピーされます。

このコードは、次の前提に基づいています。a.) foo のサイズは 3 で、パディングは適用されません。b.) これらのオブジェクトの配列は、それらの間にパディングなしでパックされます。

2 つのプラットフォーム (RedHat 64b、Solaris 9) で GNU を使用して試しましたが、両方で動作しました。

上記の仮定は有効ですか?そうでない場合、どのような条件 (OS/コンパイラの変更など) で失敗する可能性がありますか?

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

c# - クライアント サーバー データ暗号化とプロトコル設計

私は、コンピューター ラボで使用され、サービスとして機能するクライアント サーバー アプリケーションを作成しています (サービスとして実行する必要はありません)。コンソールの HWND オブジェクトを使用してネイティブ関数「ShowWindow」/SW_HIDE を呼び出すコンソール アプリケーションがあります。これにより、ここで必要なものが得られます。サーバー/クライアントは動作しています。「Hello world!」というメッセージを送信しました。クライアントからサーバーに何度も送信され、満足しています。(IT 部門がコネクションレスのアプローチを望んでいるため、ソケット プロトコルに UDP を使用しています。)

私の質問は、クライアント サーバー間の通信の「プロトコル」にあります。

サーバーの背後にある目標には、次のものが含まれます。

  • IT部門がセキュリティのためにブロックした特定の機能(「net.exe」など)へのアクセスをプログラムで許可します
  • 私のプログラムへのアクセスを許可して、学生がコンピューター室で何を見ているかを監視してください。

含めたいのは、やり取りされる簡単な質問です。

  • 「REQUSER」のコマンドは、ユーザー名とフルネームを返します (以前は「net user」で許可されていました)。
  • 「REQPROCS」のコマンドは、現在のユーザーのユーザー名で現在実行されているプロセスのリストを返します。

私はこれを行うことができることに疑いの余地はありません。現時点で私が気になっているのは、データの安全性です。私の大学には何人かの「ハッカー」がいて、パケットを盗聴する方法を知っていて、パケットを特定のサーバーに再送信して、悪意のあることをしたり、敵に関する情報を取得したりできます。

私の考えは、送信されるすべてのデータに暗号化スキームを提供し、受信時にそれをデコードすることでした。

私が話した友人は、ビット パッカーを使用する必要があると言い、私は彼の BitPacker クラスを C++ から C# に移植し始めました。

PS質問が明確であることを願っていますか?私が書いた質問のほとんどが不明確であることに気付きました。:/

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

c# - Python の struct.pack に相当する C#

標準ライブラリstructのpython と同様の機能を可能にする C# 用のライブラリはありますか?

実際に整列された構造体と非常に密接に構造体ライブラリをエミュレートできます。しかし、C# の構造体のエンディアンを直接制御する方法はまだ見つかりませんでした (C# の構造体は、汎用のバイナリ パッキングではなく、COM 相互運用性を重視しているようです)。

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

c++ - 構造体の必要なビットをchar*にパックする方法は?

言語:C ++

私はビットパッキングに取り組んでいます(与えられたデータから必要なビットを抽出し、char *にパックします)。私のコードは現在以下をサポートしています:-整数-文字-文字列

構造体の必要なビットを格納する必要がある場合、どのように処理すればよいですか?一般化されたコードwrt構造の入力パラメーターとして何を期待すべきですか?

質問は曖昧かもしれません、そして私は直接の答えを期待していません、ヒントとポインタさえありがたいです。

0 投票する
5 に答える
4009 参照

c++ - ビットフィールドをパックするとき、VC++ は何をしていますか?

私の質問を明確にするために、サンプルプログラムから始めましょう:

出力は「8」です。これは、パックしたい 56 ビット (7 バイト) が 8 バイトにパックされていることを意味し、1 バイトを無駄にしているように見えます。コンパイラがこれらのビットをどのようにメモリに配置していたのか知​​りたくて、特定の値を に書き込んでみました&c

int main(int argc, char **argv)

予想どおり、Visual Studio 2010 を使用する x86_64 では、次のことが起こります。

移植性についてはしばらく忘れて、1 つの CPU、1 つのコンパイラ、および 1 つのランタイム環境に関心があると仮定してください。VC++ がこの構造を 7 バイトにパックできないのはなぜですか? それは言葉の長さですか?MSDNのドキュメント#pragma packは、「メンバーの配置は、n の倍数 [私の場合は 1] またはメンバーのサイズの倍数のいずれか小さい方の境界上にある」と記載されています。7 ではなく 8 のサイズを取得する理由を誰か教えてもらえますか?

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

c - ビットパックされた構造体内の配列

ビットパックされた構造体の中に配列を入れたいです。私は配列のサイズ (32) を静的に知っており、配列内の各要素を 1 ビットにしたいと考えています。たとえば、次のようなことが言えるようになりたいです。

私はいくつかのことを試しましたが、gcc は動きません。パックされた配列内の要素を反復処理するクリーンなコードを記述できるように、これができると便利です。アイデア?

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

python - Pythonで任意のビットシーケンスをパックするには?

一部のバイナリ イメージ データをシーケンス if ビットとしてエンコード/圧縮したいと考えています。(このシーケンスは、一般に、整数の標準整数型にうまく収まらない長さになります。)

スペースを無駄にせずにこれを行うにはどうすればよいですか? (ビットのシーケンスが「良い」長さでない限り、最後に常に少量の[<1バイト]の残りのスペースが必要になることを認識しています。)

FWIW、エンコードするシンボルごとに最大で 3 ビットが必要になると推定しています。Python には、この種の作業用の組み込みツールがありますか?