問題タブ [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.
java - ビット演算子を使用して複数の値を 1 つの int にパックする
低レベルのビット操作は、私の得意分野ではありません。次のビット単位演算子の使用例を理解する上で、いくつかの助けをいただければ幸いです。考慮してください...
このコードが何をどのように達成しているのかわかりません。マジック ナンバー 0x7F を使用する理由 梱包と開梱はどのように行われますか?
c - ビットパッキングと動的割り当てに関する問題
このコードに問題があります。
画像エンコーダーを作成しています。基本的に、画像の値を使用してエンコーディング配列を作成しました。この配列は「コード」と呼ばれ、バイナリ値がどうなるかを示すchar*表現を格納します。
このセクションでは、各ピクセルのグレー値を読み取り、その値を「codes」配列で検索し、1バイトのバイナリ値(tempString)をパックします。8つの値が読み取られると、tempStringは、すでにエンコードされている符号なしバイト配列(encodedString)の最後に追加されます。
プログラムは、numBytesが約27千バイトになるまで実行され、その後、セグメンテーション違反が発生します。
私はそれが長い道のりであることを知っていますが、私がメモリを割り当てる方法に明白な問題があることを望んでいます。
c++ - 8 つの bool 値から 1 バイトを作成する方法 (およびその逆) は?
8 つbool
の変数があり、それらを 1 つのバイトに「マージ」したいと考えています。
これを行うための簡単な/推奨される方法はありますか?
逆に、1 バイトを 8 つの個別のブール値にデコードする方法はどうでしょうか。
不合理な質問ではないと思いますが、Google で関連ドキュメントを見つけることができなかったので、おそらく「すべての直感が間違っている」ケースの 1 つです。
c - 4 バイト配列の最下位ビットをニブルに再分配する
32 ビット値のビット 0、8、16、24 をそれぞれビット 0、1、2、3 に移動したいと考えています。入力と出力の他のすべてのビットはゼロになります。
明らかに、私は次のようにそれを行うことができます:
しかし、より高速な (命令が少ない) 方法はありますか?
c - char配列を使用して短い整数でビットフィールドをパックする方法は?
次の 2 つの構造では、
ではstruct b
、b2 のビットが b1 でパックされ、b3 のビットが b2 でパックされていることがわかります。最終的には 4 バイト値になります。
と同様の動作を期待していましたstruct a
が、同じではありません。最初の 2 バイトは a1 (未使用の 5 ビット) で占められ、その後に a2 の 4 バイトが続きます。
この動作は予期されたものですか? char[4] を short:13 と一緒にパックできないのはなぜですか? それを達成する方法はありますか?
java - Javaのlongsサーバー/クライアントトランザクションにビットをパックする
ビットをlongに圧縮するライブラリはありますか?ネットワーク経由で送信するビットを圧縮しようとしています。ビットをpngファイルに入れて転送する方が理にかなっていますか?
python - Python がディスクに書き込まれた struct.pack 文字列を破壊する
ファイルにバイナリ データ (int、double、raw バイト) を書き込むアプリケーションに取り組んでいます。
問題は、データが実際には期待どおりにファイルに書き込まれていないことです。
そのため、すべてがうまく機能しているように見えます。しかし、詳しく調べると、123.bin
ファイルには次の内容が含まれています。
io.write()
したがって、バイトが!によってスワップされたようです。
Pythonのドキュメントには、io.write()
「指定されたバイトまたはbytearrayオブジェクト」を受け入れると書かれていますが、問題は、次をstruct.pack
返すことstr
です:
それで、私は何を間違っていますか?str
文字セットを変換せbytes
ずに変換するにはどうすればよいですか?
c# - リフレクションを使用して、.Net 型がメモリ内でどのようにレイアウトされるかを判断する
C# でパーサー コンビネーターの最適化を試しています。シリアル化された形式がメモリ内形式と一致する場合に考えられる最適化の 1 つは、型のインスタンスまたは多くのインスタンスで解析されるデータの (安全でない) memcpy を実行することです。
最適化を適用できるかどうかを動的に判断するために、インメモリ形式がシリアル化された形式と一致するかどうかを判断するコードを記述したいと考えています。(明らかに、これは安全でない最適化であり、さまざまな微妙な理由で機能しない可能性があります。私は実験しているだけであり、本番コードでこれを使用する予定はありません。)
属性[StructLayout(LayoutKind.Sequential, Pack = 1)]を使用して、強制的にパディングを行わず、メモリ内の順序を宣言の順序と一致させます。私はリフレクションでその属性をチェックしますが、実際にはこれが確認するのは「パディングなし」です。フィールドの順序も必要です。(エラーが発生しやすいため、フィールドごとにFieldOffset属性を手動で指定する必要はありません。)
GetFieldsによって返されるフィールドの順序を使用できると想定しましたが、ドキュメントでは、順序が指定されていないことを明示的に示しています。
StructLayout 属性を使用してフィールドの順序を強制している場合、その順序を反映する方法はありますか?
editすべてのフィールドがblittableでなければならないという制限は問題ありません。