問題タブ [fread]
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.
c++ - null 値で読み取りの途中で終了する fread。また、期待されるデータを過ぎたガベージを読み込む
C++ で FILE オブジェクトを使用して、バイナリ ファイルの断片を読み込んでいます。fseek と対応する fread 呼び出しは次のとおりです。
m_sizeOfData は、最終的に 40 万を超える整数になります。これは、バイナリ ファイルから 40 万以上のバイトすべてをデータ (ちなみに、これは char[m_sizeOfData] です) に読み込む必要があるように見えますが、単純に見える Unicode 文字で約 6 または 7 文字後に停止します。ヌル終了を表しているのではないかと考えていますか? 私はこれについて肯定的ではありません。これは、私が読み込んでいるファイルのすべての部分に当てはまるわけではありません。ほとんどは (一般的に) 正しく動作するようです。
これはなぜでしょうか?また、すべてのデータを正しく読み取る方法はありますか?
編集:
fp は次のように定義されます。
このボックス文字は 16 進数で、0x06 の後に 0x00 が続きます。
データは次のように定義されます: char *data = new char[m_sizeOfData];
編集2:
また、別のファイルの末尾にガベージがロードされていることにも気付きました。ゴミは次のようになります。
ýýýý«««««««««îþ
これは、特定のラウンド数のバイトを完了しようとしているからですか?
fread - fread は処理能力を必要としますか / DMA で動作しますか?
fread は処理能力を必要としますか / DMA で動作しますか?
ファイルが存在するデバイスが DMA をサポートしていると仮定しますか?
c - C プログラミング ftell fseek fread、ファイルの読み取りサイズ
ファイルがあります。ファイルのサイズを読みました。次に、ファイルの最後に到達するまで、一度に 2 バイトの読み取りをループします。すべての読み取り操作の後、現在の位置を 2 ずつインクリメントしますが、ファイルのサイズが半分になった後、位置はインクリメントされず、fread 操作は 0 バイトを読み取ります。
プログラムはファイルサイズを読み取ります。現在の位置がファイルのサイズと等しくなるまで、fread (毎回 2 バイト) を実行します。ファイルサイズに対して22915バイトを読み取ります。読み取りごとに位置を2ずつ増やしますが、現在の位置がファイルのサイズの半分である11459に達すると、ゼロバイトが読み取られるため、無限ループに入ります。
c - C で float 配列にデータを読み込む
ファイル103.45
123.45
456.67からフォーマットの浮動小数点データをロードする必要があるプログラムを作成しています
......
fread() を使用して、これらのデータを浮動小数点数の配列に直接格納する方法を考えていました。ポインターを使用するのはそれほど難しくないと思いますが、私はポインターがあまり得意ではありません。誰でも方法を教えてもらえますか
fread - C++: fread と fwrite のループを使用して bmp をコピーすると、出力 bmp が入力 bmp の最初の色で塗りつぶされる
理由はわかりませんが、最初のピクセル (左下) は正しく読み込まれますが、他のピクセルは読み込まれず、最初の色が画像全体に使用されます...
私はこれをサイクルで持っています
編集:
pix は 3 つの符号なし文字 (rgb) の構造体で、ファイルと情報ヘッダーの読み込みは問題ないようです
c++ - _fread_nolock、_fseek_nolockの使用目的は何ですか?
基本的にバイナリファイルからベクトルを読み書きするC++クラスがあります。単一のベクトルをメモリにロードする読み取り関数の例は、次のようになります。
OutプログラムはOpenMPでマルチスレッド化されており、複数のスレッドが同時に同じファイルにアクセスします。複数のスレッドによる問題を回避するために、OpenMPの重要なステートメント内で関数呼び出しを常にカバーしています。
Microsoft Visual C ++ランタイムには、、などのいくつかの関数が含まれていることを知っています...たとえば、関数は次のように記述されます_fseek_nolock
。_fread_nolock
_fwrite_nolock
_fread_nolock()
この関数は、freadの非ロックバージョンです。他のスレッドによる干渉から保護されていないことを除いて、freadと同じです。他のスレッドをロックアウトするオーバーヘッドが発生しないため、より高速になる可能性があります。この関数は、シングルスレッドアプリケーションなどのスレッドセーフなコンテキストで、または呼び出し元のスコープがすでにスレッドの分離を処理している場合にのみ使用してください。
今私の質問:関数が「再入可能」呼び出しをブロックすることを理解しているので、他のスレッドが戻る前に他のスレッドが関数に入ることがありません。しかし、なぜそのように単一の機能を保護する必要があるのか理解できません。IMHO(_file
コードサンプル内の)ファイルポインタにアクセス/変更するすべての関数は保護する必要があるため、スレッドセーフにする必要があります。これには、実際に標準のC関数fseekとfreadを呼び出す関数ブロック全体の周りにロックを構築する必要があるため、このような非ブロッキング関数を提供する意味がわかりません。
私たちのパラノイドロックスキームはパフォーマンスをいくらか浪費すると思うので、誰かが私にこれらのロックメカニズムを説明できますか?
前もって感謝します!
c# - Cのfreadファイルi/oに相当するAC#
C#.NETバージョン2でバイトの配列を構造に直接取得する方法を教えてもらえますか?Cで見られるようなおなじみのfread
ように、これまでのところ、バイトのストリームを読み取って構造体を自動的に埋めることはあまり成功していません。キーワードを使用してマネージコードにポインターhocus-pocusがある実装を見てきましたunsafe
。
このサンプルを見てください:
私が2つのコンストラクターを持っている理由foobarStruct
- 空のコンストラクターは存在できませんか?
- 構造体をインスタンス化するときに、メモリのブロックを(バイト配列として)コンストラクターに渡します。
その実装は十分に良いですか、それともこれを達成するためのはるかにクリーンな方法がありますか?
編集: ISerializableインターフェースまたはその実装を使用したくありません。使用されているフィールドを計算し、PE構造を使用してそのデータを決定するために、バイナリイメージを読み取ろうとしています。
python - PythonのMatlabの「fread」に相当するものは何ですか?
私は実質的に Matlab の知識がなく、いくつかの解析ルーチンを Python に変換する必要があります。それらは大きなファイル用で、それ自体が「ブロック」に分割されており、ファイルの上部にあるチェックサムで最初から問題が発生しています。
ここMatlabで何が起こっているのでしょうか?
fid は現在見ているファイルです iBlock はファイル内のどの「ブロック」にいるかのカウンターです
magic_l と magic_h は、後でチェックサムを処理するためのものです。そのためのコードは次のとおりです (上記のコードから直接続きます)。
%08X
ともので何が起こっているのhex2dec
ですか?- また、なぜ
3*4
代わりに指定するの12
ですか?
実際には、ファイルの最初の 3 文字をプルするだけな[A, count] = fread(fid, 3, 'uint32');
ので、Python でレプリケートする方法を知りたいです。io.readline()
ここでポイントを逃した場合はお詫び申し上げます。ファイルを使用すると、本来あるべきではないものが返されるように見えるだけで、非常に長くなる可能性がある場合に、 が 1 バイトに収まるio.readline(3)
方法がわかりません。block_length
このランブルを読んでくれてありがとう。私が知りたいことを理解していただければ幸いです!(どんな洞察も大歓迎です。)
c++ - fwrite でダンプされたファイルは、異なるシステム間で移植可能ですか?
fread を使用して fwrite と read で生成されたファイルは、異なるシステム間で移植可能であると仮定できますか。32 ビット/64 ビット Windows、OSX、Linux。
そして、構造体はどうですか
これらはポータブルですか?
c++ - 配列を含む構造体を使用した fwrite
配列を含む構造体を fwrite する方法
test.bin のファイルサイズは 16 バイトで、おそらく (4+8) (int + double*) です。ファイルサイズは 4+10*8 にする必要があります (64 ビットの場合)
ありがとう