Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Endianness Secara Pemrograman dalam C ?
Mengesan Endianness Secara Program dalam C
Endianness, sifat yang menunjukkan susunan bait dalam struktur data, adalah penting untuk seni bina silang keserasian kod. Dalam C , terdapat kaedah untuk mengesan endian secara pengaturcaraan tanpa kompilasi bersyarat.
Untuk memahami kaedah ini, kami menyelidiki konsep kesatuan. Kesatuan dalam C menggabungkan berbilang jenis data ke dalam satu struktur, di mana ia berkongsi ruang memori yang sama. Dengan menggunakan kesatuan, kami boleh mengakses data yang sama dalam format data yang berbeza, menyediakan penyelesaian yang bijak untuk mengesan endianness.
Pertimbangkan coretan kod berikut:
bool is_big_endian(void) { union { uint32_t i; char c[4]; } bint = { 0x01020304 }; return bint.c[0] == 1; }
Dalam kod ini, kami tentukan kesatuan dengan integer 32-bit (uint32_t) bernama i dan tatasusunan empat aksara bernama c. Kami memulakan penyatuan dengan nilai 0x01020304, di mana bait paling ketara ialah 0x01.
Jika sistem ialah big-endian, bait paling ketara akan disimpan dalam bait pertama tatasusunan c, menjadikan bint. c[0] sama dengan 1. Sebaliknya, jika sistem adalah little-endian, bait paling tidak ketara akan disimpan dalam bait pertama c, menghasilkan bint.c[0] bersamaan dengan 4.
Dengan membandingkan bint.c[0] dengan 1, kita boleh menentukan endian sistem. Kaedah ini berkesan dan mengelakkan penggunaan punning jenis, yang boleh menjana amaran pengkompil. Selain itu, ia mematuhi piawaian C99 dan mematuhi OS yang menyokong berbilang seni bina.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Endianness Secara Pemrograman dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!