Adakah yang bisa menjelaskan kepada saya apa byte stream sebenarnya mengandung? Apakah hanya berisi byte (data hex) atau data biner atau huruf bahasa Inggris saja? Saya juga bingung tentang istilah "data mentah". Jika seseorang meminta saya untuk "membalikkan data 4 byte", lalu apa yang harus saya asumsikan bahwa data tersebut adalah kode hex atau kode biner?
stream-processing
pengguna2720323
sumber
sumber
Jawaban:
Byte stream berisi, yah, byte. Dipecah menjadi apa sebenarnya, itu adalah 8 bit yang terdiri dari 1s dan 0s. Jika itu mewakili angka, itu akan berupa angka dari 0 hingga 255 (yang, saya dapat tambahkan, bukan kebetulan mengapa 4 angka dalam alamat IP selalu berkisar dari 0 hingga 255). Byte stream biasanya antarmuka canggih yang dimaksudkan untuk menyembunyikan array byte dasar yang digunakan untuk menahan buffer lingkaran (Anda mengisi buffer dan menunggu seseorang untuk mengosongkannya, pada saat itu hanya mengisi buffer lagi).
Apa sih yang dilambangkannya? Ya, itu bisa mewakili file teks, atau gambar, atau streaming video langsung. Apa itu adalah sepenuhnya tergantung pada konteks yang membacanya. Representasi hex adalah cara lain untuk mengatakan hal yang sama, meskipun terkadang lebih mudah untuk mengelola byte dalam hal representasi hex mereka daripada angka tetapi itu adalah hal yang sama.
Saat Anda merujuk ke data mentah, Anda biasanya merujuk ke data byte. Data datang tanpa tag yang mengatakan "Saya file gambar!" Biasanya Anda hanya berurusan dengan data mentah ketika Anda tidak benar-benar peduli apa yang mewakili data secara keseluruhan. Misalnya, jika saya ingin mengonversi gambar ke versi hitam dan putih, saya dapat mengatakan untuk membaca data mentah gambar dan untuk setiap 3 byte bacaan (yang sebenarnya merupakan representasi warna merah, representasi warna hijau, dan representasi warna biru), tambahkan nilai angka dan bagi dengan 3, kemudian tulis nilai itu 3 kali. Pada dasarnya apa yang akan saya lakukan adalah rata-rata nilai-nilai piksel merah, hijau, dan biru dan membuat piksel setara abu-abu dari itu. Namun, ketika Anda berbicara tentang melakukan operasi ke data pada tingkat "byte demi byte", Anda tidak perlu
Atau, mungkin Anda ingin menyimpan file dalam database, tetapi ia meminta Anda untuk memasukkan "data mentah" dalam tipe data gumpalan. Ini hanya berarti mengubah data file menjadi array byte besar yang dapat dipahami dan dikelola oleh database. Anda akan menemukan bahwa ketika Anda mengambil nilai itu dari database, itu hanya akan menjadi satu array byte besar seperti yang Anda berikan pada database untuk memulai. Jika data itu adalah file, maka Anda, programmer, harus menafsirkan ulang data byte itu seolah-olah Anda membaca file satu byte pada suatu waktu.
Jika seseorang meminta Anda untuk "membalikkan data 4 byte", saya akan menganggap itu mengacu pada interpretasi angka big-endian vs little-endian, yang menulis angka dimulai dengan byte yang paling atau paling signifikan. Tidak masalah jika suatu angka direpresentasikan sebagai big-endian atau little-endian, hanya saja semua sistem yang membaca angka menafsirkannya secara konsisten.
Ini bukan untuk mengatakan bahwa representasi angka aktual (atau representasi hex dalam hal ini) diubah, hanya bahwa urutan 4 byte ini membuat angka harus dibalik. Jadi katakan Anda memiliki 0x01, 0x02, 0x03, dan 0x04. Untuk membalikkan ini, Anda akan memiliki 0x04, 0x03, 0x02, 0x01 sebagai gantinya. Sistem mungkin akan membaca 4 byte ini dalam urutan terbalik dan karena Anda sudah membalikkannya, nilainya ditafsirkan sama seperti apa yang dimaksudkan dalam data mentah.
Saya harap itu menjelaskannya!
sumber
Satu byte hanyalah sebuah unit informasi - bisa berupa apa saja. Byte itu sendiri tidak berarti apa-apa, Anda harus melampirkan semacam makna padanya.
Jadi, untuk memperluas itu -
Data heks sama dengan data biner. Itu hanya cara berbeda untuk menampilkan data. Misalnya, 0x41 = 0b01000001 = 'A' = 65 (desimal). Huruf-huruf bahasa Inggris hanyalah sebagian saja.
Karena hex hanyalah representasi dari data, tidak masalah bagaimana Anda memikirkannya. Jika Anda memiliki data
0x65 0x66 0x67 0x68
, untuk membalikkannya Anda akan mendapatkan0x68 0x67 0x66 0x65
. Jika Anda melihat data ini dari segi karakter, Anda awalnya akan memilikiA B C D
, tetapi sekarang Anda milikiD C B A
.Kembali ke aliran byte - itu hanya urutan data. Anda harus tahu data yang diwakilkan untuk menggunakannya. Jika kita membaca file teks, aliran byte yang akan Anda dapatkan ketika Anda membaca file itu hanya berupa karakter. File yang dapat dieksekusi akan memiliki banyak karakter yang tidak dapat dicetak di dalamnya, itulah sebabnya itu akan disebut file biner . Jelas, itu mungkin untuk membuka sebuah executable di editor teks, tetapi tidak ada gunanya.
sumber
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
Ini benar-benar mengambil setiap byte, menggesernya di posisi yang tepat, dan menggabungkan dengan yang lain.Aliran byte adalah urutan byte yang dipesan. Ada byte pertama, yang tidak memiliki pendahulu. Penggantinya adalah byte kedua, dan seterusnya. Saat ini, byte secara luas dipahami terdiri dari delapan bit. Jika kita ingin lebih tepat, kita menggunakan istilah aliran oktet dan oktet . Masih ada komputer dengan byte yang tidak lebar delapan bit.
Heksadesimal adalah cara penulisan angka, dan berfungsi sebagai representasi cetak untuk data biner. Heksadesimal sebenarnya adalah teks. Misalnya, nilai heksadesimal
FE
mungkin mewakili byte: bit11111110
yang memiliki nilai desimal255
. NamunFE
sebenarnya string karakter terdiri dari karakterF
danE
, yang membutuhkan dua byte di set karakter US-ASCII atau ISO-646! Dua byte ini adalah apaFE
adanya , dan byte tunggal dengan nilai 254 adalah apa yangFE
diwakilinya , sebagai notasi cetak.Jika saluran komunikasi, atau file handle atau perangkat semacam itu digambarkan membawa aliran byte, dan tidak ada informasi lain yang diberikan, itu hampir pasti tidak berarti bahwa byte direpresentasikan sebagai teks heksadesimal, sehingga setiap byte abstrak dalam aliran memerlukan dua byte fisik.
Dan data mentah berarti bit yang tidak diartikan memiliki struktur apa pun di luar "array bit". Data mentah biasanya memiliki struktur dan mewakili sesuatu, tetapi ketika kita melihatnya sebagai data mentah, kita mengabaikan interpretasi untuk saat ini (misalnya, kita melihat representasi mentah dari tipe data untuk memverifikasi kebenarannya. ke detail level bit), atau interpretasi tidak tersedia (kami memiliki beberapa data, tetapi kami tidak memahami struktur data dan apa yang diwakilinya).
sumber
Satu byte adalah 8 bit. Bit adalah 0 atau 1. "Data mentah" hanya aliran satu byte demi satu. Aliran byte dapat berasal dari file, koneksi jaringan, objek serial, generator nomor acak, dll.
Ada beberapa cara untuk menampilkan byte: biner (01110110), hex = hexidecimal (7C), oktal (0271), atau desimal (215). Dalam semua kasus, nilai maksimum adalah 255 (basis 10).
Terkadang byte ditugaskan untuk karakter, seperti ascii. Ketik "ascii" pada baris perintah unix, dan Anda akan mendapatkan tabel besar yang memetakan byte byte 0-255 atau (hex 0-FF) ke karakter terkait. Misalnya, ruang adalah x20 dan "A" adalah x40. Perhatikan bahwa beberapa nilai byte memetakan untuk mengontrol karakter dan tidak dapat dicetak. Tapi byte itu sendiri bukan karakter - mereka hanya setumpuk bit. Sebuah angka.
"membalikkan 4 byte" akan mengambil beberapa byte 123 42 231 0 dan membalik urutan - 0 231 42 123. Diterapkan ke byte uap, saya mungkin akan membaca 4 byte, balikkan, baca 4 byte berikutnya, dll .
(BTW masalah itu relevan, karena jika Anda ingin merepresentasikan angka yang lebih besar dari 255 sebagai bye, Anda perlu menggunakan lebih dari satu byte. Tetapi kemudian pertanyaannya adalah, apakah byte "terbesar" datang pertama, atau terakhir? Itu disebut big endian atau little endian - cari yang lebih banyak latar belakang tentang mengapa berguna untuk mengacak byte dalam stream byte mentah.)
sumber