問題タブ [binary-data]
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.
vbscript - vbscript を使用して、32 ビット浮動小数点をバイナリ バイトまたはワード表現に変換します。
vbscript (vb ではない) 内で 2 つの多少関連するタスクを実行する方法がわかりません。32 ビット浮動小数点を 4 バイトのバイナリ表現に分割する必要があります。- 32 ビット浮動小数点を 2 ワード (別名 16 ビット) のバイナリ表現に分割する必要があります。
たとえば、バイナリ形式の 65535.0 は 100011101111111111111100000000 です。
java - 優れたバイナリ データ圧縮 Java ライブラリは何ですか?
バイナリ データ、具体的にはシリアル化された Java オブジェクトの圧縮を検討しています。このウィキペディアのページにリストされているアルゴリズムのいずれかを実装する必要があると思います。いくつかのチュートリアルとブログ投稿を見つけましたが、ライブラリは見つかりませんでした (そして、見つけたほとんどのコードは他の言語から移植されたようです...そして、メソッド名が大文字で始まる Java ライブラリの効率と正確さを信頼していません) . そのため、シリアライズされた Java オブジェクト (および任意のバイナリ データ) を圧縮するのに最も適したアルゴリズムのポインタは、非常に高く評価されます。そして、誰かがこのトピックに関連するアクティブなプロジェクトを知っているとしたら、それは驚くべきことです (Apache には何もないように見えました)。
.net - .NET を使用してバイナリ データ (バイナリ ファイルなど) を文字列にエクスポートしますか?
バイナリ データ(Excel ドキュメントや Word ドキュメントなどのバイナリ ファイル) を.NETの文字列(テキスト形式)に変換/エクスポートするにはどうすればよいですか?別のプログラミング言語 (.NET ではない))。この目標を達成するための普遍的な概念はありますか?
java - apache commons-net FTPClientで生のバイナリを転送しますか?
更新:解決済み
FTPClient.setFileType()
ログインする前に電話をかけていたため、FTPサーバーは何ASCII
に設定してもデフォルトモード( )を使用していました。一方、クライアントは、ファイルタイプが適切に設定されているかのように動作していました。モードは現在、希望どおりに機能しており、すべての場合にファイルをバイト単位で転送します。私がしなければならなかったのは、wiresharkでトラフィックをスニッフィングし、netcatを使用してFTPコマンドを模倣して、何が起こっているかを確認することだけでした。どうして2日前に考えなかったの!?みなさん、ありがとうございました!BINARY
utf-16でエンコードされたxmlファイルがあり、apacheのcommons-net-2.0javaライブラリのFTPClientを使用してFTPサイトからダウンロードしています。これは、2つの転送モードのサポートを提供します。ASCII_FILE_TYPE
とBINARY_FILE_TYPE
、違いは、ASCII
行区切り文字を適切なローカル行区切り記号(または16進数の-またはちょうど)に'\r\n'
置き換える'\n'
こと0x0d0a
です0x0a
。私の問題はこれです:私は以下を含むテストファイル、utf-16でエンコードされています:
<?xml version='1.0' encoding='utf-16'?>
<data>
<blah>blah</blah>
</data>
これが16進数です。
0000000: 003c 003f 0078 006d 006c 0020 0076 0065 .<.?.x.m.l. .v.e
0000010: 0072 0073 0069 006f 006e 003d 0027 0031 .r.s.i.o.n.=.'.1
0000020: 002e 0030 0027 0020 0065 006e 0063 006f ...0.'. .e.n.c.o
0000030: 0064 0069 006e 0067 003d 0027 0075 0074 .d.i.n.g.=.'.u.t
0000040: 0066 002d 0031 0036 0027 003f 003e 000a .f.-.1.6.'.?.>..
0000050: 003c 0064 0061 0074 0061 003e 000a 0009 .<.d.a.t.a.>....
0000060: 003c 0062 006c 0061 0068 003e 0062 006c .<.b.l.a.h.>.b.l
0000070: 0061 0068 003c 002f 0062 006c 0061 0068 .a.h.<./.b.l.a.h
0000080: 003e 000a 003c 002f 0064 0061 0074 0061 .>...<./.d.a.t.a
0000090: 003e 000a
.>..
このファイルにモードを使用するとASCII
、バイト単位で正しく転送されます。結果は同じmd5sumになります。素晴らしい。BINARY
バイトをからにシャッフルする以外に何もしないはずの転送モードを使用するInputStream
とOutputStream
、改行(0x0a
)がキャリッジリターン+改行ペア(0x0d0a
)に変換されます。バイナリ転送後の16進数は次のとおりです。
0000000: 003c 003f 0078 006d 006c 0020 0076 0065 .<.?.x.m.l. .v.e
0000010: 0072 0073 0069 006f 006e 003d 0027 0031 .r.s.i.o.n.=.'.1
0000020: 002e 0030 0027 0020 0065 006e 0063 006f ...0.'. .e.n.c.o
0000030: 0064 0069 006e 0067 003d 0027 0075 0074 .d.i.n.g.=.'.u.t
0000040: 0066 002d 0031 0036 0027 003f 003e 000d .f.-.1.6.'.?.>..
0000050: 0a00 3c00 6400 6100 7400 6100 3e00 0d0a ..<.d.a.t.a.>...
0000060: 0009 003c 0062 006c 0061 0068 003e 0062 ...<.b.l.a.h.>.b
0000070: 006c 0061 0068 003c 002f 0062 006c 0061 .l.a.h.<./.b.l.a
0000080: 0068 003e 000d 0a00 3c00 2f00 6400 6100 .h.>....<./.d.a.
0000090: 7400 6100 3e00 0d0a
t.a.>...
改行文字を変換するだけでなく(変換すべきではありません)、utf-16エンコーディングを尊重しません(変換する必要があることを認識しているとは限りません。単なるFTPパイプです)。結果は、バイトを再調整するための追加の処理なしでは読み取ることができません。モードを使用するだけASCII
ですが、アプリケーションは実際のバイナリデータ(mp3ファイルとjpegイメージ)も同じパイプ上で移動します。BINARY
これらのバイナリファイルで転送モードを使用する0x0d
と、コンテンツにランダムなsが挿入されますが、バイナリデータには正当な0x0d0a
シーケンスが含まれていることが多いため、安全に削除することはできません。これらのファイルでモードを使用するASCII
と、「賢い」0x0d0a
0x0a
私の質問は次のとおりだと思います:いまいましいバイトをそこからここに移動するだけのJava用の優れたFTPライブラリを知っている人はいますか、それともapachecommons-net-2.0をハックして維持する必要がありますかこの単純なアプリケーション専用の自分のFTPクライアントコード?他の誰かがこの奇妙な行動に対処しましたか?任意の提案をいただければ幸いです。
BINARY
commons-netのソースコードを確認しましたが、モードを使用した場合の奇妙な動作の原因ではないようです。しかし、モードInputStream
での読み取りは、ソケットにラップされているだけです。これらの低レベルのJavaストリームは、奇妙なバイト操作を行うことがありますか?彼らがそうしたら私はショックを受けるでしょう、しかし私はここで他に何が起こっているのか分かりません。BINARY
java.io.BufferedInptuStream
InputStream
編集1:
これは、ファイルをダウンロードするために私が行っていることを模倣した最小限のコードです。コンパイルするには、
実行するには、ファイルをダウンロードするためのディレクトリ/ tmp/asciiと/tmp/ binary、およびファイルが置かれたftpサイトが必要です。コードは、適切なftpホスト、ユーザー名、およびパスワードを使用して構成する必要もあります。このファイルをtest/フォルダーの下のtestingftpサイトに置き、ファイルtest.xmlを呼び出しました。テストファイルには、少なくとも1行以上が含まれ、utf-16でエンコードされている必要があります(これは必要ない場合もありますが、正確な状況を再現するのに役立ちます)。新しいファイルを開いた後にvimの:set fileencoding=utf-16
コマンドを使用し、上記のxmlテキストを入力しました。最後に、実行するには、
コード:
(注:このコードは、以下の「編集2」の下にリンクされているカスタムFTPClientオブジェクトを使用するように変更されています)
編集2:
さて、私はCheckedXputStream
アドバイスに従いました、そしてここに私の結果があります。FTPClient
と呼ばれるapacheのコピーを作成し、チェックサムを使用してとのMyFTPClient
両方をラップしました。さらに、出力をチェックサム付きで保存するために与えるものをラップしました。MyFTPClientのコードはここに投稿されており、このバージョンのFTPClientを使用するように上記のテストコードを変更しました(変更されたコードに要点URLを投稿しようとしましたが、複数のURLを投稿するには10レピュテーションポイントが必要です!)、そして結果はこうだった:SocketInputStream
BufferedInputStream
CheckedInputStream
CRC32
FileOutputStream
FTPClient
CheckOutputStream
CRC32
test.xml
test.mp3
対応するファイルのmd5sumは次のとおりであるため、これは基本的にまったく意味がありません。
私は途方に暮れています。このプロセスのどの時点でもファイル名/パスを並べ替えていないことを誓います。また、すべてのステップをトリプルチェックしました。それは単純なことであるに違いありませんが、私は次にどこを見るべきかについて最も霧深い考えを持っていません。実用性のために、FTP転送を行うためにシェルに呼び出して続行しますが、何が起こっているのかを理解するまでこれを追求するつもりです。私はこのスレッドを私の発見で更新します、そして私は誰もが持っているかもしれないどんな貢献にも感謝し続けます。うまくいけば、これはいつか誰かに役立つでしょう!
java - 大きなバイナリ データを含むヘッセ行列 (Java)
Hessian (Java) caucho 実装を使用した大規模なバイナリ データ転送の完全な例を探しています。
どこで見つけられますか?
python - Pythonの検索とバイナリファイルでの置換
このpdfフォームファイル(header.fdf、これはバイナリファイルとして扱われると思います)のテキストの一部(「Smith、John」など)を検索して置き換えようとしています。
後
次のエラーが発生します。
これを行うにはどうすればよいですか?
sql-server-2005 - バイナリデータ、sqlserver2005を使用して初期データsqlscriptsを作成します
TFS 2008 Teambuildtypeを使用して、アプリケーションのレビューバージョン用のClickOnceセットアップを作成します。このTeambuildtype内で、テストを直接開始するためのデータを含む初期データベースを作成します。
次に、SQLスクリプト挿入ファイル(Wordfiles)にバイナリデータを入れる必要があります。
バイナリデータを使用して初期スクリプトを作成するにはどうすればよいですか?バイナリ文字列をスクリプトに入れることができませんか?
どうもありがとう
編集:OpenRowsetで解決策を見つけました
binary - MIDIプログラムチェンジイベント
Midi Event Commandsを参照してください。ここでは、プログラム チェンジなどの一部のイベントは 1 つのパラメーターのみを使用することが説明されています。
私の質問は、このイベントの 2 番目のパラメーターのバイトと一緒に何を送信するかということです。それは 0x00 ですか? または、本当に意味をなさないイベントから完全に省略しますか?
c++ - 構造体のデータメンバー間のパディングバイトを取り除く方法
「メッセージ」を含むバイナリファイルがあり、構造体を使用して正しい変数内にバイトを収めようとしています。この例では、Tmessage と Amessage の 2 種類のメッセージを使用しました。
プログラムを実行したときの出力:
プログラムは、バイトを Tmessage 構造体内に正しく配置します。(0 5 54 0 0 62 72)
しかし、Amessage の解析中に何かが発生します。
(0 1c 41 0 f 42 40 0 0 0 0 4 2f 76 53 0 0 3 e8 53 50 59 20 20 20 0 11 5 d0)
長さ、メッセージ タイプ、およびタイムスタンプは正しいが、OrderReferenceNumber には BuySellIndicator に属する「53」バイトが含まれており、他の変数が正しくありません。
正しい A メッセージ出力は次のようになります:
長さ: 1c 0
メッセージ タイプ: 41
タイムスタンプ: 40 42 f 0
注文参照番号: 76 2f 4 0 0 0 0 0
BuySellIndicator: 53
株式: e8 3 0 0
株式: 53 50 59 20 20 20
価格: d0 5 11 0
2 つの質問: a) OrderReferenceNumber に「53」バイトが含まれているのはなぜですか? b) Share のバイトと Price のバイトの間に 6 バイト以上あるため、「char Stock[6]」は機能しないと思います。6 バイトを char ベクトルまたは文字列に収めるにはどうすればよいですか?
注: バイナリ データはビッグ エンディアンであるため、バイトを交換する必要があることは承知しています。そのため、「Stock」はスワップされるべきではありません。ご助力ありがとうございます!敬具、
perl - perlスクリプトが64ビットマシンで実行されていると見なす方法は?
Perlスクリプトに64ビットマシンで実行されていると思わせるにはどうすればよいですか?64ビットマシンで書き込まれたデータのバイナリ解析を実行する必要がありますが、32ビットマシンで(たとえば、引数フラグを介して)解析する必要があります。私のコードでは、フォーマットを使用してpack/unpackを使用しています'L!4'
。