実際のバイトストリームとは何ですか?

実際に含まれているバイトストリームを誰かに説明してもらえますか?バイト(16進データ)またはバイナリデータまたは英字のみが含まれていますか? 「生データ」という言葉についても混乱しています。誰かが「4バイトのデータを逆にする」ように頼んだ場合、データが16進コードまたは2進コードであると想定する必要がありますか?

コメント

  • 私の2セントは答える価値がありません(そして、以下にすでに良いものがあります)が、”生データ”についての良い洞察をおそらく提供するこれらの2つの記事へのリンクを提供したいと思いますdiv id = “e0729838dd”>

は実際に何かを意味すると解釈されます(’何を表すのか、どのようにエンコードされるのかがわからない限り、何も意味しません/保存済み) betterexplained.com/articles/ … joelonsoftware。 com / articles / Unicode.html

  • javaはバイトを作成してc / c ++ ‘のcharを’文字として理解されていません。 charのサイズが1バイトであるため、charはc / c ++で多く使用されました。また、UNIXのデバイスはブロックデバイスとキャラクターデバイスです。 charデバイスから読み取る場合、unsigned chars / bytesのストリームを取得します。
  • バイトストリームはあいまいです。オクテットストリームはそうではありません。
  • データはさまざまなレベルで解釈できます。下部には、’一連のオン/オフ電気レベルがあります。少し上に’バイトのチャンク、またはあなたが言うように、バイトストリームです。さらに上に行くと、生データの解釈が始まります。バイトは、さまざまな方法(エンコーディング)でテキストとして解釈できます。整数も(ビッグエンディアンまたはリトルエンディアン)。あなたももっと高く行くことができます。 zipファイルがあります。そのzipファイルは昨日からのバックアップです。等々。問題は、正確なレベルが暗黙的で明確にされていないことが多く、これが混乱を招く可能性があることです。
  • 回答

    バイトストリームには、まあ、バイトが含まれています。実際に分解すると、1と0で構成される8ビットです。それが数字を表す場合、それは0から255までの任意の数字になります(これは、IPアドレスの4つの数字が常に0から255の範囲である理由は偶然ではありません)。バイトストリームは通常、循環バッファを保持するために使用される基になる基本的なバイト配列を非表示にすることを目的とした高度なインターフェイスです(バッファがいっぱいになり、誰かが空になるのを待つと、バッファがいっぱいになります再び)。

    それは一体何を表していますか?まあ、それはテキストファイル、画像、またはライブビデオストリームを表すことができます。それが何であるかは、誰が読んでいるかという文脈に完全に依存しています。 16進表現は同じことを言う別の方法ですが、数値よりも16進表現の観点からバイトを管理する方が便利な場合もありますが、同じことです。

    「生データを参照する場合、通常はバイトデータを参照します。データには「私は画像ファイルです!」というタグが付いていません。通常、生データを扱うのはそうでない場合のみです。」データが全体的に何を表しているかを本当に気にします。たとえば、画像を白黒バージョンに変換したい場合は、画像の生データを読み取り、3バイトごとに読み取ると言うことができます(実際には、赤色の表現、緑色の表現、および青色の表現)、その数値を加算して3で除算し、その値を3回書き込みます。基本的に、私が行うことは、ピクセルの赤、緑、青の値を平均し、そこから灰色の同等のピクセルを作成することです。 。ただし、「バイトごと」のレベルでデータに対して操作を実行することについて話すときは、いわば全体像をあまり気にしません。

    または、ファイルをデータベースに保存したいが、その「生データ」をblobデータ型に挿入するように求められる場合があります。これは単に、ファイルのデータを、データベースが理解および管理できる大きなバイト配列に変換することを意味します。データベースからその値を取得すると、最初にデータベースに提供した1つの大きなバイト配列になります。そのデータがファイルの場合、プログラマーはそのバイトを再解釈する必要があります。一度に1バイトずつファイルを読んでいるかのようにデータ。

    誰かが「4バイトのデータを逆にする」ように頼んだ場合、それは数値のビッグエンドとリトルエンディアンの解釈を指していると思います。 、最上位バイトまたは最下位バイトで始まる数値を書き込みます。数値がビッグエンドまたはリトルエンディアンのどちらで表されているかは関係ありません。数値を読み取るすべてのシステムが一貫して解釈するだけです。

    これ実際の数値表現(または16進数表現)が変更されたと言っているのではなく、単にこれらの4バイトが数値を作成する順序を逆にする必要があるということです。つまり、0x01、0x02、0x03、および0x04があるとします。これらを逆にするには、代わりに0x04、0x03、0x02、0x01を使用します。システムはおそらくこれらの4バイトを逆の順序で読み取ります。すでに逆になっているため、値は以前とまったく同じであると解釈されます。生データで意図されています。

    それが説明されることを願っています!

    コメント

    • すべて問題ありません..! “生データ”に関する回答を詳しく説明していただけますか?
    • @ user2720323わかりました、わかりやすく説明するために変更しました”生データ。” 🙂
    • 覚えておくべき1つのこと…すべてのデータは単なるコレクションですバイトの。これらのバイトの意味は、ある種のメタデータ(ファイル拡張子、データベースフィールドなど)によって定義されます。画像ファイルはASCIIファイルとして解釈でき、その逆も可能です。テキストや画像は無意味かもしれませんが、それでも可能です。 (Derp …次の回答を読むべきだった)
    • @kevincline私が’アイデアを伝えようとしているという事実に感謝してください。私の優先事項は、正確なアルゴリズムを作成することではありません。’より正確にしたい場合は、’人間の目が認識できるものに応じて、赤、緑、青の値を比較検討します。

    回答

    バイトは単なる情報の単位であり、何でもかまいません。バイト自体は何の意味もありません。何らかの意味を付加する必要があります。

    つまり、それを拡張するには-

    バイト(16進データ)またはバイナリデータまたは英字のみが含まれていますか?

    16進データはバイナリデータと同じです。 ” ■データを表示する別の方法。たとえば、0x41 = 0b01000001 = “A” = 65(10進数)です。英字はそのサブセットにすぎません。

    誰かが「4バイトのデータを逆にする」ように頼んだ場合、データは何であると想定する必要がありますかhexコードまたはバイナリコード?

    hexはデータの単なる表現であるため、どのように考えるかは問題ではありません。 0x65 0x66 0x67 0x68のデータがある場合、それを逆にすると0x68 0x67 0x66 0x65になります。このデータを次の観点から見た場合文字の場合、元々はA B C Dでしたが、現在はD C B Aです。

    バイトストリームに戻る-それ”は単なるデータのシーケンスです。データを使用するには、データが何を表しているのかを知る必要があります。 「テキストファイルを読んでいる場合」、ファイルを読んでいるときに取得するバイトストリームは、ある種の文字にすぎません。実行可能ファイルには、印刷できない文字がたくさん含まれているため、バイナリファイルと呼ばれます。明らかに、テキストエディタで実行可能ファイルを開くことは可能ですが、何の役にも立ちません。

    コメント

    • +1しかし、緯度ビットでのバイナリの強調は見当違いのようです。 “バイナリデータ”には印刷できない文字が含まれていることがよくありますが、’は

      binary ” ‘は、印刷できない文字が含まれているためではなく、2進数で構成されているため。 ‘印刷可能なividの代わりに”バイナリ”を使用していることを理解しました= “e0729838dd”>

    text “データですが、これによりOPがさらに混乱する可能性があると思います。

  • 逆転に関して1つ質問があります。 。ファイルに整数(32ビット)325487がある場合、この4バイトの整数を逆にするにはどうすればよいですか?同様に、私は単語(” hai how are you “)、すべての文字をバイトと見なしてこの文字列を逆にする方法を持っています。
  • @ user2720323 int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);これは文字通り各バイトを取得し、正しい位置にシフトして、他のバイトと結合します。
  • 回答

    バイトストリームは、順序付けられたバイトのシーケンスです。先行バイトがない最初のバイトがあります。その後継は2番目のバイトであり、以下同様です。現在、1バイトは8ビットで構成されていると広く理解されています。より正確にしたい場合は、オクテットストリームおよびオクテットという用語を使用します。 8ビット幅ではないバイトを持つコンピュータがまだ存在します。

    16進数は数値を書き込む方法であり、バイナリデータの印刷表現として機能します。16進数は実際にはテキストです。たとえば、16進値FEはバイトを表す場合があります:10進値iv id = “abde31350a”を持つビット11111110 >

    。ただし、FEは、実際には文字FEで構成される文字列です。 US-ASCIIまたはISO-646文字セットの2つのバイト!これらの2バイトは、FEであり、値が254の1バイトです。FEが表すは、印刷された表記です。

    通信チャネル、ファイルハンドル、またはそのようなデバイスが記述されている場合バイトストリームを伝送し、他の情報が提供されていないため、バイトが16進テキストとして表されることを意味するではありません。 、したがって、ストリーム内の各抽象バイトには2つの物理バイトが必要です。

    そして、生データとは、単に「ビットの配列」以外の構造を持つと解釈されないビットを意味します。生データは通常、構造を持ち、何かを表しますが、生データとして見るときは、今のところ解釈を無視しています(たとえば、データ型の生の表現を見て、その正確性を確認していますビットレベルの詳細まで)、または解釈が利用できない(データはありますが、データの構造とその意味がわかりません)。

    コメント

    • PDP-10には、可変サイズのバイトを処理するための命令がありました。最も一般的なのは7ビットASCIIで、その後に6ビット文字が続きました。

    回答

    バイトは8ですビット。ビットは0または1です。「生データ」は、次々と1バイトが流れるだけです。バイトストリームは、ファイル、ネットワーク接続、シリアル化されたオブジェクト、乱数ジェネレーターなどから取得できます。

    • バイトを表示する方法はいくつかあります。バイナリ(01110110) 、hex = 16進数(7C)、8進数(0271)、または10進数(215)。いずれの場合も、最大値は255(基数10)です。

    • asciiのように、文字にバイトが割り当てられる場合があります。 UNIXコマンドラインで「ascii」と入力すると、バイト値0〜255または(0〜FF hex)を関連する文字にマップする大きなテーブルが表示されます。たとえば、スペースはx20、「A」はx40です。 。一部のバイト値は制御文字にマップされ、印刷できないことに注意してください。しかし、バイト自体は文字ではなく、単なるビットの束です。数値。

    • 「4バイトを逆にする」とは、いくつかのバイトを取り、123 42 231 0の順序を逆にすることです-023142123。バイトスチームに適用すると、I 「おそらく4バイトを読み取ったり、逆にしたり、次の4バイトを読み取ったりします。

    (BTWは、さようならとして255、あなたは複数のバイトを使用する必要があります。しかし、問題は、「最大の」バイトが最初に来るのか、それとも最後に来るのかということです。それはビッグエンディアンまたはリトルエンディアンと呼ばれます。生のバイトストリームのバイトをシャッフルすると便利です。)

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です