Paket python int ke byte
Modul ini melakukan konversi antara nilai Python dan struktur C yang direpresentasikan sebagai objek Python. Ini dapat digunakan dalam menangani data biner yang disimpan dalam file atau dari koneksi jaringan, di antara sumber lainnya. Ini digunakan sebagai deskripsi ringkas tata letak struct C dan konversi yang dimaksudkan ke/dari nilai Python Show
Catatan Secara default, hasil pengepakan struct C yang diberikan menyertakan pad byte untuk menjaga keselarasan yang tepat untuk tipe C yang terlibat; . Perilaku ini dipilih sehingga byte dari struct yang dikemas sesuai persis dengan tata letak di memori dari struct C yang sesuai. Untuk menangani format data platform-independen atau menghilangkan byte pad implisit, gunakan ukuran dan perataan Beberapa fungsi (dan metode ) menggunakan argumen penyangga. 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 7. 1. 1. Fungsi dan PengecualianModul ini mendefinisikan pengecualian dan fungsi berikut pengecualian>>> 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)3 >>> 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)4 Pengecualian diajukan pada berbagai kesempatan; >>> 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)3 >>> 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)6 ( fmt, v1, v2,. ) Mengembalikan objek byte yang berisi nilai v1, v2,. dikemas sesuai dengan format string fmt. Argumen harus sama persis dengan nilai yang diperlukan oleh format >>> 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)3 >>> 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)8 ( fmt, buffer, offset, v1, v2,. ) Kemas nilai v1, v2,. sesuai dengan format string fmt dan tulis byte yang dikemas ke dalam buffer buffer yang dapat ditulis mulai dari offset posisi. Perhatikan bahwa offset adalah argumen yang diperlukan >>> 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)3 >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 50 ( fmt, buffer ) Buka paket dari buffer buffer (mungkin dikemas oleh >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 51) sesuai format string fmt. Hasilnya adalah sebuah tuple meskipun hanya berisi satu item. Ukuran buffer dalam byte harus sesuai dengan ukuran yang dibutuhkan oleh format, sebagaimana dicerminkan oleh >>> 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)3 >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 54 ( fmt, buffer, offset=0 ) Unpack dari buffer mulai dari offset posisi, sesuai dengan format string fmt. Hasilnya adalah sebuah tuple meskipun hanya berisi satu item. Ukuran buffer dalam byte, minus offset, harus setidaknya ukuran yang dibutuhkan oleh format, seperti yang ditunjukkan oleh >>> 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)3 >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 57 ( fmt, buffer ) Unpack secara iteratif dari buffer buffer sesuai dengan format string fmt. 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 >>> 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)3 >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'0 ( fmt ) Kembalikan ukuran struct (dan karenanya objek bytes yang dihasilkan oleh >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 51) sesuai dengan format string fmt 7. 1. 2. Memformat StringString format adalah mekanisme yang digunakan untuk menentukan tata letak yang diharapkan saat mengemas dan membongkar data. Mereka dibangun dari , yang menentukan jenis data yang sedang dikemas/dibongkar. Selain itu, ada karakter khusus untuk mengontrol 7. 1. 2. 1. 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) Alternatifnya, karakter pertama dari string format dapat digunakan untuk menunjukkan urutan byte, ukuran, dan perataan data yang dikemas, menurut tabel berikut CharacterByte orderSizeAlignment>>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'2nativenativenative >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'3nativestandardnone >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'4little-endianstandardnone >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'5big-endianstandardnone >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'6network (= big-endian)standardnone Jika karakter pertama bukan salah satunya, diasumsikan >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'7 Urutan byte asli adalah big-endian atau little-endian, tergantung pada sistem host. Misalnya, Intel x86 dan AMD64 (x86-64) adalah little-endian; . Gunakan >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'_8 untuk memeriksa keberakhiran sistem Anda Ukuran dan perataan asli ditentukan menggunakan ekspresi >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'9 kompiler C. Ini selalu digabungkan dengan urutan byte asli Ukuran standar hanya bergantung pada format karakter; Perhatikan perbedaan antara >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'_7 dan struct 1. keduanya menggunakan urutan byte asli, tetapi ukuran dan perataan yang terakhir distandarisasiFormulir Tidak ada cara untuk menunjukkan urutan byte non-native (memaksa byte-swapping); Catatan
7. 1. 2. 2. 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 FormatC TypePython typeStandard sizeNotesstruct 9pad byteno value bytes 0bytes 1bytes of length 11 bytes 2bytes 3integer1(1),(3)bytes 4bytes 5integer1(3)bytes 6bytes 7bool1(1)bytes 8bytes 9integer2(3)standard 0standard 1integer2(3)standard 2standard 3integer4(3)standard 4standard 5integer4(3)standard 6standard 7integer4(3)standard 8standard 9integer4(3) Berubah di versi 3. 3. Menambahkan dukungan untuk format Berubah di versi 3. 6. Menambahkan dukungan untuk format Catatan
Karakter format dapat didahului dengan jumlah pengulangan integral. Misalnya, format string >>> 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)_16 artinya persis sama dengan >>> 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)17 Karakter spasi antar format diabaikan; Untuk karakter format >>> 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)18, hitungan ditafsirkan sebagai panjang byte, bukan hitungan berulang seperti karakter format lainnya; . Jika hitungan tidak diberikan, standarnya adalah 1. Untuk pengepakan, string dipotong atau diisi dengan byte nol yang sesuai untuk membuatnya pas. Untuk membongkar, objek byte yang dihasilkan selalu memiliki jumlah byte yang ditentukan. Sebagai kasus khusus, >>> 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)_21 berarti satu string kosong (sementara >>> 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)22 berarti 0 karakter) Saat 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)24, >>> 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)25, >>> 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)26, >>> 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)27, _________28, Berubah di versi 3. 1. Dalam 3. 0, beberapa format bilangan bulat membungkus nilai di luar jangkauan dan sebagai gantinya dinaikkan. Karakter format >>> 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)38 mengkodekan "string Pascal", yang berarti string pendek dengan panjang variabel yang disimpan dalam jumlah byte tetap, diberikan oleh hitungan. Byte pertama yang disimpan adalah panjang string, atau 255, mana yang lebih kecil. Byte dari string mengikuti. Jika string yang diteruskan ke terlalu panjang (lebih panjang dari hitungan minus 1), hanya >>> 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)40 byte terdepan dari string yang disimpan. Jika string lebih pendek dari >>> 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)_40, itu diisi dengan byte nol sehingga jumlah byte yang digunakan sama persis. Perhatikan bahwa untuk , karakter format >>> 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)_38 menggunakan >>> 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)44 byte, tetapi string yang dikembalikan tidak akan pernah berisi lebih dari 255 byte Untuk karakter format >>> 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)46 saat membongkar 7. 1. 2. 3. ContohCatatan Semua contoh mengasumsikan urutan, ukuran, dan penyelarasan byte asli dengan mesin big-endian Contoh dasar pengepakan/pembongkaran tiga bilangan bulat >>> from struct import * >>> pack('hhl', 1, 2, 3) b'\x00\x01\x00\x02\x00\x00\x00\x03' >>> unpack('hhl', b'\x00\x01\x00\x02\x00\x00\x00\x03') (1, 2, 3) >>> calcsize('hhl') 8 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 karena bantalan yang diperlukan untuk memenuhi persyaratan penyelarasan berbeda >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 5 Format berikut >>> 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)_49 menetapkan dua pad byte di bagian akhir, dengan asumsi long disejajarkan pada batas 4-byte >>> pack('llh0l', 1, 2, 3) b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00' Ini hanya berfungsi ketika ukuran dan perataan asli berlaku; Lihat juga Modul Penyimpanan biner yang dikemas dari data homogen. Modul Mengemas dan membongkar data XDR7. 1. 3. KelasModul ini juga mendefinisikan tipe berikut kelas>>> 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)3 >>> 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)54 ( format ) Kembalikan objek Struct baru yang menulis dan membaca data biner sesuai dengan format format string. Membuat objek Struct satu kali dan memanggil metodenya lebih efisien daripada memanggil fungsi dengan format yang sama karena string format hanya perlu dikompilasi satu kali Objek Struct yang dikompilasi mendukung metode dan atribut berikut >>> 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)6 ( v1, v2,. ) Identik dengan fungsinya, menggunakan format yang dikompilasi. ( >>> 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)58 akan sama. ) >>> 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)8 ( penyangga, offset, v1, v2,. ) Identik dengan fungsinya, menggunakan format yang dikompilasi >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 50 ( penyangga ) Identik dengan fungsinya, menggunakan format yang dikompilasi. Ukuran buffer dalam byte harus sama >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 54 ( buffer, offset=0 ) Identik dengan fungsinya, menggunakan format yang dikompilasi. Ukuran buffer dalam byte, minus offset, setidaknya harus >>> pack('ci', b'*', 0x12131415) b'*\x00\x00\x00\x12\x13\x14\x15' >>> pack('ic', 0x12131415, b'*') b'\x12\x13\x14\x15*' >>> calcsize('ci') 8 >>> calcsize('ic') 57 ( penyangga ) Identik dengan fungsinya, menggunakan format yang dikompilasi. Ukuran buffer dalam byte harus kelipatan Baru di versi 3. 4 >>> 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)_71 String format yang digunakan untuk membuat objek Struct ini >>> 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)_72 Ukuran struct yang dihitung (dan karenanya objek bytes yang dihasilkan oleh metode) sesuai dengan Berapa byte int Python?Agar aman, Python mengalokasikan sejumlah byte ruang dalam memori untuk setiap variabel bertipe integer normal, yang dikenal sebagai int dalam Python. Biasanya, bilangan bulat menempati empat byte , atau 32 bit.
Bagaimana Anda mengubah data menjadi byte dengan Python?Python byte() function mengonversi objek menjadi objek yang diwakili oleh byte yang tidak dapat diubah dengan ukuran dan data tertentu. . Sintaksis. byte(src, enc, err) Parameter Pengembalian. Byte objek tetap yang terdiri dari unicode 0-256 karakter sesuai dengan tipe src Bisakah Anda memasukkan nilai int ke dalam variabel byte?Tidak mungkin . Satu byte adalah 0 hingga 255. Int jauh lebih besar dari itu. Jadi, Anda dapat mengonversi int menjadi aliran byte, tetapi tidak menjadi byte.
Bagaimana cara mengubah hex int menjadi byte dengan Python?Gunakan byte. fromhex() function untuk Mengonversi nilai Heksadesimal menjadi Byte dengan Python. fromHex() adalah metode kelas yang membuat byte sebagai objek dari string heksadesimal. Untuk dua string heksadesimal, satu byte diberikan dalam metode ini. |