Modul ini mengonversi antara nilai Python dan struktur C yang direpresentasikan sebagai objek Python. Ringkas jelaskan konversi yang dimaksud ke/dari nilai Python. Fungsi dan objek modul dapat digunakan untuk dua aplikasi yang sangat berbeda, pertukaran data dengan sumber eksternal (file atau koneksi jaringan), atau transfer data antara aplikasi Python dan lapisan C Show Catatan Jika tidak ada karakter awalan yang diberikan, mode asli akan menjadi default. Itu mengemas atau membongkar data berdasarkan platform dan kompiler tempat juru bahasa Python dibangun. Hasil pengepakan struct C yang diberikan termasuk pad byte yang mempertahankan keselarasan yang tepat untuk tipe C yang terlibat; . Sebaliknya, saat mengkomunikasikan data antara sumber eksternal, pemrogram bertanggung jawab untuk menentukan urutan byte dan mengisi antar elemen. Lihat detailnya Beberapa fungsi (dan metode ) menggunakan argumen buffer. Ini mengacu pada objek yang mengimplementasikan dan menyediakan buffer yang dapat dibaca atau dibaca-ditulis. Jenis yang paling umum digunakan untuk tujuan itu adalah and , tetapi banyak jenis lain yang dapat dilihat sebagai larik byte yang mengimplementasikan protokol buffer, sehingga dapat dibaca/diisi tanpa penyalinan tambahan dari objek Fungsi dan PengecualianModul ini mendefinisikan pengecualian dan fungsi berikut pengecualian struct. kesalahanPengecualian diajukan pada berbagai kesempatan; struktur. paket(format , v1 . , v2, ...)Mengembalikan objek byte yang berisi nilai v1, v2, … dikemas sesuai dengan format format string. Argumen harus sama persis dengan nilai yang diperlukan oleh format struktur. pack_into(format , buffer . , offset, v1, v2, ...)Kemas nilai v1, v2, … sesuai dengan format format string dan tulis byte yang dikemas ke dalam buffer buffer yang dapat ditulis mulai dari offset posisi. Perhatikan bahwa offset adalah argumen yang diperlukan struktur. bongkar(format , penyangga)Buka paket dari buffer buffer (mungkin dikemas oleh >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 327677) sesuai dengan format format string. Hasilnya adalah sebuah tuple meskipun hanya berisi satu item. Ukuran buffer dalam byte harus sesuai dengan ukuran yang dibutuhkan oleh format, sebagaimana dicerminkan olehstruktur. unpack_from(format , /, buffer, offset=0) Buka paket dari buffer mulai dari offset posisi, sesuai dengan format format string. Hasilnya adalah sebuah tuple meskipun hanya berisi satu item. Ukuran buffer dalam byte, mulai dari offset posisi, harus setidaknya ukuran yang dibutuhkan oleh format, seperti yang ditunjukkan oleh struktur. iter_unpack(format , penyangga)Buka paket secara iteratif dari buffer buffer sesuai dengan format format string. Fungsi ini mengembalikan iterator yang akan membaca potongan berukuran sama dari buffer sampai semua isinya telah dikonsumsi. Ukuran buffer dalam byte harus merupakan kelipatan dari ukuran yang dibutuhkan oleh format, seperti yang ditunjukkan oleh Setiap iterasi menghasilkan tuple seperti yang ditentukan oleh format string Baru di versi 3. 4 struktur. menghitung(format)Kembalikan ukuran struct (dan karenanya objek byte yang dihasilkan oleh >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 327677) sesuai dengan format format string Memformat StringString format menjelaskan tata letak data saat mengemas dan membongkar data. Mereka dibangun dari , yang menentukan jenis data yang sedang dikemas/dibongkar. Selain itu, karakter khusus mengontrol. Setiap string format terdiri dari karakter awalan opsional yang mendeskripsikan properti keseluruhan data dan satu atau lebih karakter format yang mendeskripsikan nilai dan padding data aktual Urutan Byte, Ukuran, dan PerataanSecara default, tipe C direpresentasikan dalam format asli mesin dan urutan byte, dan diselaraskan dengan benar dengan melewatkan byte pad jika perlu (sesuai dengan aturan yang digunakan oleh kompiler C). Perilaku ini dipilih sehingga byte dari struct yang dikemas sesuai persis dengan tata letak memori dari struct C yang sesuai. Apakah akan menggunakan pengurutan dan pengisi byte asli atau format standar tergantung pada aplikasi Alternatifnya, karakter pertama dari string format dapat digunakan untuk menunjukkan urutan byte, ukuran, dan perataan data yang dikemas, menurut tabel berikut Karakter Urutan byte Ukuran Penyelarasan >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'2 warga asli warga asli warga asli >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'_3 warga asli standar tidak ada >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'_4 little-endian standar tidak ada >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'5 big-endian standar tidak ada >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'6 jaringan (= big-endian) standar tidak ada Jika karakter pertama bukan salah satu dari ini, >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'7 diasumsikan Urutan byte asli adalah big-endian atau little-endian, tergantung pada sistem host. Misalnya, Intel x86, AMD64 (x86-64), dan Apple M1 adalah little-endian; . Gunakan untuk memeriksa endianness sistem Anda Ukuran dan perataan asli ditentukan menggunakan ekspresi >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'9 compiler C. Ini selalu digabungkan dengan urutan byte asli Ukuran standar hanya bergantung pada format karakter; Perhatikan perbedaan antara >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'7 dan >>> record = b'raymond \x32\x12\x08\x01\x08' >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record) >>> from collections import namedtuple >>> Student = namedtuple('Student', 'name serialnum school gradelevel') >>> Student._make(unpack('<10sHHb', record)) Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)1. keduanya menggunakan urutan byte asli, tetapi ukuran dan perataan yang terakhir distandarisasi Bentuk >>> record = b'raymond \x32\x12\x08\x01\x08' >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record) >>> from collections import namedtuple >>> Student = namedtuple('Student', 'name serialnum school gradelevel') >>> Student._make(unpack('<10sHHb', record)) Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)_2 mewakili urutan byte jaringan yang selalu big-endian sebagaimana didefinisikan dalam IETF RFC 1700 Tidak ada cara untuk menunjukkan urutan byte non-native (memaksa byte-swapping); Catatan
Memformat KarakterFormat karakter memiliki arti sebagai berikut; . Kolom 'Ukuran standar' mengacu pada ukuran nilai yang dikemas dalam byte saat menggunakan ukuran standar; . Saat menggunakan ukuran asli, ukuran nilai yang dikemas bergantung pada platform Format Tipe C Jenis ular piton Ukuran standar Catatan >>> record = b'raymond \x32\x12\x08\x01\x08' >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record) >>> from collections import namedtuple >>> Student = namedtuple('Student', 'name serialnum school gradelevel') >>> Student._make(unpack('<10sHHb', record)) Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)_9 pad byte Tidak bernilai (7) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_0 arang byte dengan panjang 1 1 >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_1 ditandatangani char bilangan bulat 1 (1), (2) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_2 tidak ditandatangani char bilangan bulat 1 (2) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_3 _Bool bool 1 (1) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_4 pendek bilangan bulat 2 (2) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_5 tidak ditandatangani pendek bilangan bulat 2 (2) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_6 int bilangan bulat 4 (2) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_7 tidak ditandatangani int bilangan bulat 4 (2) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_8 panjang bilangan bulat 4 (2) >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5_9 tidak bertanda tangan panjang bilangan bulat 4 (2) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'0 panjang panjang bilangan bulat 8 (2) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'1 tidak ditandatangani panjang panjang bilangan bulat 8 (2) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'2 ukuran_t bilangan bulat (3) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'3 size_t bilangan bulat (3) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'4 (6) mengambang 2 (4) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'5 mengambang mengambang 4 (4) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'6 dobel mengambang 8 (4) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'7 karakter[] byte (9) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'8 karakter[] byte (8) >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'_9 batal* bilangan bulat (5) Berubah di versi 3. 3. Menambahkan dukungan untuk format >>> calcsize('@lhl') 24 >>> calcsize('@llh') 180 dan >>> calcsize('@lhl') 24 >>> calcsize('@llh') 181. Berubah di versi 3. 6. Menambahkan dukungan untuk format >>> calcsize('@lhl') 24 >>> calcsize('@llh') 182. Catatan
Karakter format dapat didahului dengan jumlah pengulangan integral. Misalnya, format string >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 12 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) False_5 artinya persis sama dengan >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 12 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) False6 Karakter spasi antar format diabaikan; Mengemas nilai >>> record = b'raymond \x32\x12\x08\x01\x08' >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record) >>> from collections import namedtuple >>> Student = namedtuple('Student', 'name serialnum school gradelevel') >>> Student._make(unpack('<10sHHb', record)) Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)9 Menggunakan salah satu format integer ( >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 12 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) False8, >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 12 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) False9, >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 3276700, >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 3276701, ______________0 ________0 ________0____0.0____3, ________0 ______0. Berubah di versi 3. 1. Sebelumnya, beberapa format bilangan bulat membungkus nilai di luar rentang dan dimunculkan sebagai ganti. Untuk karakter format >>> calcsize('@lhl') 24 >>> calcsize('@llh') 183, nilai kembaliannya adalah salah satu atau. Saat mengemas, nilai kebenaran objek argumen digunakan. Baik 0 atau 1 dalam representasi bool asli atau standar akan dikemas, dan nilai bukan nol apa pun akan menjadi >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 3276713 saat membongkar ContohCatatan Contoh urutan byte asli (ditunjuk oleh awalan format >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'7 atau tidak adanya karakter awalan apa pun) mungkin tidak cocok dengan apa yang dihasilkan mesin pembaca karena bergantung pada platform dan kompiler Kemas dan buka kemasan bilangan bulat dari tiga ukuran berbeda, menggunakan pemesanan big endian >>> from struct import * >>> pack(">bhl", 1, 2, 3) b'\x01\x00\x02\x00\x00\x00\x03' >>> unpack('>bhl', b'\x01\x00\x02\x00\x00\x00\x03' (1, 2, 3) >>> calcsize('>bhl') 7 Mencoba mengemas bilangan bulat yang terlalu besar untuk bidang yang ditentukan >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 32767 Peragakan perbedaan antara >>> calcsize('<qh6xq') 24 >>> pack('<qh6xq', 1, 2, 3) == pack('@lhl', 1, 2, 3) True >>> calcsize('@llh') 18 >>> pack('@llh', 1, 2, 3) == pack('<qqh', 1, 2, 3) True >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 24 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) True9 dan >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 3276718 format karakter >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123' Bidang yang belum dibuka dapat diberi nama dengan menugaskannya ke variabel atau dengan membungkus hasilnya dalam tupel bernama >>> record = b'raymond \x32\x12\x08\x01\x08' >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record) >>> from collections import namedtuple >>> Student = namedtuple('Student', 'name serialnum school gradelevel') >>> Student._make(unpack('<10sHHb', record)) Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8) Pengurutan karakter format mungkin berdampak pada ukuran dalam mode asli karena padding bersifat implisit. Dalam mode standar, pengguna bertanggung jawab untuk memasukkan padding yang diinginkan. Perhatikan dalam panggilan >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 32767_19 pertama di bawah bahwa tiga byte NUL ditambahkan setelah >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 3276720 yang dikemas untuk menyelaraskan bilangan bulat berikut pada batas empat byte. Dalam contoh ini, keluaran dihasilkan pada mesin little endian >>> pack('@ci', b'#', 0x12131415) b'#\x00\x00\x00\x15\x14\x13\x12' >>> pack('@ic', 0x12131415, b'#') b'\x15\x14\x13\x12#' >>> calcsize('@ci') 8 >>> calcsize('@ic') 5 Format berikut >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 32767_21 menghasilkan dua pad byte yang ditambahkan di akhir, dengan asumsi panjang platform disejajarkan pada batas 4-byte >>> pack('@llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00' Lihat juga ModulPenyimpanan biner yang dikemas dari data homogen ModulPembuat enkode dan dekoder JSON ModulSerialisasi objek Python AplikasiAda dua aplikasi utama untuk modul ini, pertukaran data antara kode Python dan C dalam aplikasi atau aplikasi lain yang dikompilasi menggunakan kompiler yang sama (), dan pertukaran data antara aplikasi menggunakan tata letak data yang disepakati (). Secara umum, string format yang dibuat untuk kedua domain ini berbeda Format AsliSaat membuat string format yang meniru tata letak asli, kompiler dan arsitektur mesin menentukan pengurutan dan pengisian byte. Dalam kasus seperti itu, karakter format >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'2 harus digunakan untuk menentukan urutan byte asli dan ukuran data. Pad byte internal biasanya dimasukkan secara otomatis. Ada kemungkinan bahwa kode format pengulangan-nol akan diperlukan di akhir string format untuk membulatkan ke batas byte yang benar untuk penyelarasan potongan data yang tepat. Pertimbangkan dua contoh sederhana ini (pada mesin 64-bit, little-endian) >>> calcsize('@lhl') 24 >>> calcsize('@llh') 18 Data tidak diisi ke batas 8 byte di akhir string format kedua tanpa menggunakan bantalan tambahan. Kode format zero-repeat memecahkan masalah itu >>> calcsize('@llh0l') 24 Kode format >>> calcsize('<qh6xq') 24 >>> pack('<qh6xq', 1, 2, 3) == pack('@lhl', 1, 2, 3) True >>> calcsize('@llh') 18 >>> pack('@llh', 1, 2, 3) == pack('<qqh', 1, 2, 3) True >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 24 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) True1 dapat digunakan untuk menentukan perulangan, tetapi untuk format asli lebih baik menggunakan format perulangan nol seperti >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 3276728 Secara default, pengurutan dan penyelarasan byte asli digunakan, tetapi lebih baik eksplisit dan menggunakan karakter awalan >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'7 Format StandarSaat bertukar data di luar proses Anda seperti jaringan atau penyimpanan, lakukan dengan tepat. Tentukan urutan, ukuran, dan perataan byte yang tepat. Jangan menganggap mereka cocok dengan urutan asli dari mesin tertentu. Misalnya, urutan byte jaringan adalah big-endian, sedangkan banyak CPU populer adalah little-endian. Dengan mendefinisikan ini secara eksplisit, pengguna tidak perlu peduli dengan spesifikasi platform tempat kode mereka dijalankan. Karakter pertama biasanya harus >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'4 atau >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'5 (atau >>> pack("@ccc", b'1', b'2', b'3') b'123' >>> pack("@3s", b'123') b'123'6). Padding adalah tanggung jawab programmer. Karakter format pengulangan nol tidak akan berfungsi. Sebagai gantinya, pengguna harus secara eksplisit menambahkan >>> calcsize('<qh6xq') 24 >>> pack('<qh6xq', 1, 2, 3) == pack('@lhl', 1, 2, 3) True >>> calcsize('@llh') 18 >>> pack('@llh', 1, 2, 3) == pack('<qqh', 1, 2, 3) True >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 24 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) True1 pad byte jika diperlukan. Meninjau kembali contoh-contoh dari bagian sebelumnya, kita punya >>> calcsize('<qh6xq') 24 >>> pack('<qh6xq', 1, 2, 3) == pack('@lhl', 1, 2, 3) True >>> calcsize('@llh') 18 >>> pack('@llh', 1, 2, 3) == pack('<qqh', 1, 2, 3) True >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 24 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) True Hasil di atas (dieksekusi pada mesin 64-bit) tidak dijamin cocok jika dijalankan pada mesin yang berbeda. Misalnya, contoh di bawah dijalankan pada mesin 32-bit >>> calcsize('<qqh6x') 24 >>> calcsize('@llh0l') 12 >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3) False KelasModul ini juga mendefinisikan tipe berikut kelas struct. Struktur(format)Kembalikan objek Struct baru yang menulis dan membaca data biner sesuai dengan format format string. Membuat objek >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 327673 satu kali dan memanggil metodenya lebih efisien daripada memanggil fungsi tingkat modul dengan format yang sama karena string format hanya dikompilasi sekali Catatan Versi terkompilasi dari string format terbaru yang diteruskan ke dan fungsi tingkat modul di-cache, sehingga program yang hanya menggunakan beberapa string format tidak perlu khawatir tentang penggunaan kembali satu instans. Objek Struct yang dikompilasi mendukung metode dan atribut berikut paket(v1 , v2, ...)Identik dengan fungsinya, menggunakan format yang dikompilasi. ( >>> pack(">h", 99999) Traceback (most recent call last): File "<stdin>", line 1, in <module> struct.error: 'h' format requires -32768 <= number <= 3276739 akan sama. )pack_into(buffer , offset, v1, v2, ...) Identik dengan fungsinya, menggunakan format yang dikompilasi bongkar(penyangga)Identik dengan fungsinya, menggunakan format yang dikompilasi. Ukuran buffer dalam byte harus sama unpack_from(buffer , offset=0)Identik dengan fungsinya, menggunakan format yang dikompilasi. Ukuran buffer dalam byte, mulai dari offset posisi, setidaknya harus iter_unpack(penyangga)Identik dengan fungsinya, menggunakan format yang dikompilasi. Ukuran buffer dalam byte harus kelipatan Baru di versi 3. 4 formatString format yang digunakan untuk membuat objek Struct ini Berubah di versi 3. 7. Jenis string format sekarang sebagai ganti. ukuranUkuran struct yang dihitung (dan karenanya objek bytes yang dihasilkan oleh metode) sesuai dengan Bagaimana cara membaca string biner dengan Python?Metode #1. Data biner dibagi menjadi set 7 bit karena set biner ini sebagai input, mengembalikan nilai desimal yang sesuai yang merupakan kode ASCII dari karakter string. Kode ASCII ini kemudian diubah menjadi string menggunakan fungsi chr() .
Bagaimana Anda membaca data biner?Untuk membaca dari file biner . Gunakan metode ReadAllBytes, yang mengembalikan konten file sebagai larik byte. Contoh ini membaca dari file C. /Dokumen dan Pengaturan/potret diri. . Untuk file biner yang besar, Anda dapat menggunakan metode Read dari objek FileStream untuk membaca dari file hanya dalam jumlah tertentu pada satu waktu Bagaimana cara Python menyimpan data dalam file biner?buang(). Metode yang digunakan untuk menulis data ke file biner adalah metode dump() . Dibutuhkan dua argumen 'file object' dan 'file' sebagai parameter. Ini mengembalikan representasi objek dalam mode byte. Metode dump() milik modul pickle.
Apa itu data biner di Python?Variabel biner adalah variabel kategorikal yang hanya dapat mengambil salah satu dari dua nilai, biasanya direpresentasikan sebagai Boolean — Benar atau Salah — atau variabel bilangan bulat — 0 atau 1. |