誰が実際にバイトストリームに含まれているのか説明できますか?バイト(16進データ)またはバイナリデータまたは英字のみが含まれていますか?「生データ」という用語についても混乱しています。「4バイトのデータを逆にする」ように頼まれた場合、データは16進コードまたはバイナリコードであると想定する必要がありますか?
誰が実際にバイトストリームに含まれているのか説明できますか?バイト(16進データ)またはバイナリデータまたは英字のみが含まれていますか?「生データ」という用語についても混乱しています。「4バイトのデータを逆にする」ように頼まれた場合、データは16進コードまたはバイナリコードであると想定する必要がありますか?
回答:
バイトストリームには、バイトが含まれています。実際の状態に分解すると、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バイトを逆の順序で読み取り、すでに逆にしたため、値は生データで意図されたものとまったく同じであると解釈されます。
これで説明できればと思います!
バイトは単なる情報の単位であり、何でもかまいません。バイト自体は何の意味もありません。何らかの意味を付加する必要があります。
それで、それを拡張するために-
バイト(16進データ)またはバイナリデータまたは英字のみが含まれていますか?
16進データはバイナリデータと同じです。これは、データを表示するための別の方法です。たとえば、0x41 = 0b01000001 = 'A' = 65(10進数)。英語の文字はその一部にすぎません。
「4バイトのデータを逆にする」ように頼まれた場合、データは16進コードまたはバイナリコードであると想定する必要がありますか?
16進数は単なるデータの表現であるため、どのように考えるかは関係ありません。のデータがあれば0x65 0x66 0x67 0x68
、それを逆にするためにあなたは得るでしょう0x68 0x67 0x66 0x65
。このデータを文字の観点から見ると、元はA B C D
でしたが、現在はですD C B A
。
バイトストリームに戻る-それは単なるデータのシーケンスです。データを使用するには、データが何を表すかを知る必要があります。テキストファイルを読み込んでいる場合、ファイルを読み込んでいるときに取得するバイトストリームは、ある種の文字になります。実行可能ファイルには、印刷できない文字が多数含まれているため、バイナリファイルと呼ばれます。明らかに、テキストエディターで実行可能ファイルを開くことは可能ですが、何も便利ではありません。
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
これは文字通り各バイトを受け取り、正しい位置にシフトし、他のバイトと結合します。
バイトストリームは、バイトの順序付きシーケンスです。最初のバイトがあり、先行バイトはありません。その後続は2番目のバイトなどです。現在、1バイトは8ビットで構成されると広く理解されています。より正確にしたい場合は、オクテットストリームとオクテットという用語を使用します。8ビット幅ではないバイトを持つコンピューターはまだ存在します。
16進数は数値を記述する方法であり、バイナリデータの印刷表現として機能します。16進数は実際にはテキストです。たとえば、16進値FE
は1バイト(11111110
10進値を持つビット)を表す場合があります255
。ただしFE
、実際には文字F
とE
で構成される文字列であり、US-ASCIIまたはISO-646文字セットの2バイトが必要です!これら2バイトものでFE
あり、値254を有する単一のバイトが何FE
を表し印刷表記として、。
通信チャネル、ファイルハンドル、またはそのようなデバイスがバイトストリームを運ぶと説明され、他の情報が提供されない場合、ほとんど確実にバイトが16進テキストとして表されることを意味しないため、ストリーム内の各抽象バイトは2つの物理バイト。
また、生データとは、単に「ビットの配列」を超える構造を持つと解釈されないビットを意味します。通常、生データは構造を持ち、何かを表しますが、生データとして見ると、現時点では解釈を無視しています(たとえば、データ型の生表現を見て、その正確性を検証しています)ビットレベルの詳細まで)、または解釈が利用できません(一部のデータはありますが、データの構造とそれが表すものを理解していません)。
1バイトは8ビットです。ビットは0または1です。「生データ」は、次から次へとバイトが流れるだけです。バイトストリームは、ファイル、ネットワーク接続、シリアル化されたオブジェクト、乱数ジェネレーターなどから取得できます。
バイトを表示する方法はいくつかあります:バイナリ(01110110)、16進数= 16進数(7C)、8進数(0271)、または10進数(215)。すべての場合で、最大値は255(10を基数)です。
ASCIIのように、バイトが文字に割り当てられる場合があります。UNIXコマンドラインで「ascii」と入力すると、バイト値0-255または(0-FF hex)を関連する文字にマップする大きなテーブルが表示されます。たとえば、スペースはx20で、「A」はx40です。一部のバイト値は制御文字にマップされ、印刷できないことに注意してください。しかし、バイト自体は文字ではなく、単なるビットの束です。数。
「リバース4バイト」は、一部のバイト123 42 231 0を取得し、順序を反転します-0 231 42 123。 。
(ところで、byesのように255より大きい数値を表現したい場合は、1バイト以上を使用する必要があるため、問題が関連しています。しかし、問題は、「最大」バイトが最初に来るのか、最後に来るのかですビッグエンディアンまたはリトルエンディアン-生のバイトストリームのバイトをシャッフルすることが有用である理由について、より多くの背景を調べてください。