問題タブ [endianness]
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.
python - Python File Slurp w/エンディアン変換
最近、 pythonでファイルを丸呑みする方法を尋ねられ、受け入れられた答えは次のようなものを提案しました:
ファイルを読み込んでデータのエンディアン表現を変換するにはどうすればよいですか?
たとえば、ビッグ エンディアンとしてパックされた単精度浮動小数点数の集まりである 1 GB のバイナリ ファイルがあり、それをリトル エンディアンに変換して numpy 配列にダンプしたいとします。以下は、これを達成するために私が書いた関数と、それを呼び出す実際のコードです。私struct.unpack
はエンディアン変換を使用し、を使用してすべてを高速化しようとしましたmmap
。
私の質問は、丸呑みをmmap
and で正しく使用していstruct.unpack
ますか? これを行うためのよりクリーンで高速な方法はありますか? 現在、私が持っているものはうまくいきますが、これをより良くする方法を学びたいと思っています.
前もって感謝します!
endianness - PPC のエンディアンに関係なく、Altivec のロードとストアを処理しますか?
Altivec に 32 ビット整数値を並列処理する SIMD コードがあります。場合によっては、整数をリトル エンディアンとしてロードしたい場合もあれば、ビッグ エンディアンとしてロードしたい場合もあります (注: この選択は、ネイティブ CPU のエンディアンに関係なく、実行中のアルゴリズムに基づいています)。実際のバイト スワップの実行は、Altivec の並べ替え操作を使用すると非常に簡単です。Apple が文書化しています。
私が心配しているのは、PowerPC ではビッグ エンディアンまたはリトル エンディアンの操作が許可されているため、リトル エンディアンのロード/ストアまたはビッグ エンディアンのロード/ストアでバイト スワップが必要かどうかわかりません。(現在、私のコードは常にリトル エンディアンで実行され、ビッグ エンディアンのメモリ操作では決してスワップされません。これは、もちろんビッグ エンディアンで実行されているため、現在使用している 970 で正常に動作します)。
私が見つけた限りでは、リトル エンディアン モードの PPC は比較的まれですが、実際には存在します。理想的には、コードがモードに関係なく正しく迅速に動作するようにしたいと考えています。
CPU のエンディアンに関係なく、AltiVec レジスタへのビッグ エンディアンとリトル エンディアンのロードを処理する方法はありますか? これに関連して知っておくべき他の問題はありますか? ウィキペディアには(引用されていない、当然のことながら)声明があります:
「AltiVec の操作は、128 ビットであるにもかかわらず、64 ビットであるかのように扱われます。これにより、AltiVec より前に設計されたリトルエンディアンのマザーボードとの互換性が可能になります。」
これは、リトルエンディアン モードの AltiVec に固有の他の不快感があるかもしれないと私に思わせます。
c - htons の混乱 - リトル エンディアン/ビッグ エンディアン
ソケットを介してあるプロセスから別のプロセスに整数変数を送信し、受信側で値を出力すると、値は ntohl/htonl を使用しなくても同じです。ソケット構造を初期化する以外に、これらの関数をどこで使用する必要がありますか。リトル/ビッグエンディアンを理解しています。しかし、値が同じままであるのに、なぜポート番号と IP 番号をホスト/ネットワークのバイト順に変換する必要があるのでしょうか。整数がネットワーク経由で転送される方法を詳しく説明してください。
c - 浮動小数点を符号なし変数に変換する方法は?
誰かが浮動小数点変数に関するバイト順序付けを手伝ってくれませんか?実際、コードはSolarisでは正しく機能していますが、WindowsXPでは機能していません。これが私のコードの一部の例です:...。
..。
このコードは、Unixではgccを使用し、wndowsではMSVC++6を使用してコンパイルされました。皆様のご協力をよろしくお願いいたします。エンディアンに関する有用な情報を提供するリンクやドキュメントをご案内いただければ幸いです...
よろしくお願いします、mk
c++ - Windows と Solaris の間でバイナリ形式のデータを交換するには、どのような方法がありますか?
Windows で実行されているプログラムと Unix で実行されている他のプログラムの間で、インターネット ソケットを介してデータ構造 (つまり、バイナリ形式) を渡す方法があるかどうか教えてください。
それを扱う資料へのアイデアやリンクは非常に高く評価されます。ご協力ありがとうございます、Mk
unix - Unix hexdump のエンディアン
次の *nix コマンドは、IP とポート (127.0.0.1:80) の 16 進表現を hexdump コマンドにパイプします。
-e フラグを使用すると、任意の形式で入力を解析できます。この場合、IP の最初の 3 オクテットを符号なし 10 進数に解析し、その後にドットを付けます。最後のオクテットも符号なし 10 進数に解析されますが、その後にコロンが続きます。最後に、ここに問題があります。ポートの 2 バイトは、改行が続く単一の符号なし 10 進数として解析されます。
このコマンドを実行するシステムのエンディアンによって、結果は異なります。ビッグ エンディアン システムではポート 80 が正しく表示されます。一方、リトル エンディアン システムではポート 20480 が表示されます。
-e を介して任意のフォーマット指定を許可しながら、エンディアンを認識するように hexdump を操作する方法はありますか?
c - バイナリファイルを読み込んで出力をCでfloatとして表示する方法は?
バイナリ ファイルに格納されている 4 バイトの数値を読み込もうとしていますが、正しい出力が得られないようです。これが私のコードです:
私の出力は v = -961576900.0000000 ですが、v = 3.14159 である必要があります。私の問題がどこにあるかについてのアイデアはありますか?
注意。input.dat はバイナリ ファイルです: 11010000 00001111 01001001 01000000
ありがとう
macos - MAC上のCプログラムのRUN時にCPUタイプをチェック
C プログラムは、(コンパイル時ではなく) 実行時に、リトル エンディアンまたはビッグ エンディアンのどちらの CPU で実行されているかをどのように判断しますか?
「コンパイル時」ではなく「実行時」チェックでなければならない理由は、Intel-CPU を搭載した MAC を使用して、MAC OSX のユニバーサル バイナリ形式でプログラムをビルドしているためです。そして、このプログラムは Intel と Power-PC の両方の CPU で動作することが期待されています。つまり、MAC 上の Universal Binary フォーマットを通じて、Intel-CPU を使用してプログラムを構築し、それを PPC CPU で実行したいと考えています。
CPU チェックを必要とする私のプログラムのロジックは、64 ビット整数のホストからネットワークへのバイト順変更関数です。現在、インテル CPU では問題なく動作しますが、PPC では機能しません。C関数は次のとおりです。
クロスプラットフォームの方法でこれを行うより良い方法はありますか?
ありがとう
c++ - 整数の各バイトはCPU/メモリにどのように格納されますか?
私はこれを試しました
出力は次のようになります:
89
0
0
0
これは私の胃のcuzをかなり訓練します私は数が0x00000059のようにメモリに保存されると思ったので、どうしてc [0]は89になるのですか?私はそれがc[3]にあるはずだと思った...