誰かがバイトストリームに実際に含まれているものを私に説明できますか?バイト(16進データ)またはバイナリデータまたは英字のみが含まれていますか? 「生データ」という用語についても混乱しています。誰かが「4バイトのデータを元に戻す」ように依頼した場合、データが16進コードまたはバイナリコードであるとどうしたらよいでしょうか。
バイトストリームにはバイトが含まれています。実際にそれを分解すると、1と0で構成される8ビットです。数値を表す場合は、0から255までの任意の数値になります(追加することもできますが、IPアドレスの4つの数値が常に0から255の範囲であるのは偶然ではありません)。 Byte streamsは、通常、循環バッファーを保持するために使用される基本的な基本バイト配列を非表示にすることを目的とする洗練されたインターフェイスです(バッファーがいっぱいになり、誰かがそれを空にするのを待ちます。再び)。
それは一体何を表していますか?まあ、それはテキストファイル、画像、またはライブビデオストリームを表すことができます。それが何であるかisは、誰がそれを読んでいるかという文脈に完全に依存しています。 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
です。
バイトストリームに戻ります-それは単なるデータのシーケンスです。データを使用するには、データが何を表しているかを知る必要があります。テキストファイルを読み取っている場合、ファイルを読み取っているときに取得されるバイトストリームは、ある種の文字になります。実行可能ファイルには、印刷できない文字がたくさん含まれているため、バイナリファイルと呼ばれます。明らかに、実行可能ファイルをテキストエディターで開くことは可能ですが、それは何の役にも立ちません。
バイトストリームは、順序付けられたバイトのシーケンスです。最初のバイトがあり、前身はありません。その後続は2番目のバイトで、以降も同様です。今日では、1バイトは8ビットで構成されると広く理解されています。より正確にしたい場合は、octet streamおよびoctet。 8ビット幅ではないバイトを持つコンピューターはまだ存在します。
16進数は数値を書き込む方法であり、バイナリデータの印刷表現として機能します。 16進数は実際にはテキストです。たとえば、16進値FE
はバイトを表す可能性があります。ビット11111110
10進数値255
。ただし、FE
は実際にはF
とE
からなる文字列であり、US-ASCIIまたはISO-646ではtwoバイトが必要ですキャラクターセット!これらの2バイトはFE
isであり、値254の1バイトはFE
が表すものです、印刷表記として。
通信チャネル、ファイルハンドル、またはそのようなデバイスがバイトストリームを伝送するものとして記述されていて、他の情報が与えられていない場合、ほぼ確実にnotはバイトが16進テキストとして表されることを意味します。ストリームの各抽象バイトには2つの物理バイトが必要です。
また、生データとは単に「ビットの配列」以外の構造を持つと解釈されないビットを意味します。生データは通常構造を持ち、何かを表しますが、それを生データとして見ているときは、当面の解釈を無視しています(たとえば、データタイプの生の表現を見て、その正しさを確認しています)ビットレベルの詳細)、または解釈が利用できません(一部のデータはありますが、データの構造とそれが何を表すかを理解していません)。
1バイトは8ビットです。ビットは0または1です。「生データ」は、1バイトずつのフローです。バイトストリームは、ファイル、ネットワーク接続、シリアル化されたオブジェクト、乱数ジェネレータなどから取得できます。
バイトを表示する方法はいくつかあります:バイナリ(01110110)、16進数= 16進数(7C)、8進数(0271)、または10進数(215)。すべての場合において、最大値は255(10を底とする)です。
ASCIIのように、バイトが文字に割り当てられる場合があります。 UNIXコマンドラインで「ascii」と入力すると、バイト値0〜255または(0〜FF 16進数)を関連する文字にマップする大きなテーブルが表示されます。たとえば、スペースはx20、「A」はx40です。一部のバイト値は制御文字にマップされ、印刷できないことに注意してください。しかし、バイト自体は文字ではなく、単なるビットの束です。数。
「4バイトを反転」は、いくつかのバイト123 42 231 0を取り、順序を逆にします-0 231 42 123。 。
(ちなみに、この問題は関係があります。255より大きい数をバイとして表すには、1バイト以上を使用する必要があるためです。しかし、問題は、「最大の」バイトが最初に来るのか、最後に来るのかということです。ビッグエンディアンまたはリトルエンディアン-生のバイトストリーム内のバイトをシャッフルすることが有用である理由の詳細については、それらを調べてください。)