Jadi, saya ingin dapat menulis data biner dalam C yang bergantian antara satu byte dan bilangan bulat bertanda 32-bit, dan memiliki tipe struct yang dapat digunakan untuk ini dengan penambahan pointer.
Sejauh ini, ini adalah struct saya
struct MarkedInt
{
unsigned char mark;
int value;
};
Dan ini kode saya
void clean_obj(struct MarkedInt* mi)
{
mi->mark = 0;
mi->value = 0;
}
int main(void) {
struct MarkedInt a;
clean_obj(&a);
a.mark = 5;
a.value = 500;
unsigned char* printer = (unsigned char*)(&a);
printf("sizeof a is %lu\n", sizeof(a));
for(int i = 0; i< sizeof(a);i++)
{
printf("%u\n", printer[i]);
}
return 0;
}
Namun, hasil dari program ini adalah ini
sizeof a is 8
5
4
64
0
244
1
0
0
Jadi ini menetapkan ukuran struct MarkedInt
saya menjadi 8, membuat anggota tanda menjadi 4 byte, bukan 1. Hal ini menyebabkan beberapa padding yang tidak diinginkan, di mana penunjuk ke struct yang digunakan untuk membaca data biner akan membaca 8 byte sekaligus dan bukan 5 .
Hasil yang saya inginkan adalah ini
unsigned char buf[] = {/*mark*/ 5, /*int value*/ 1, 0, 0, 0};
struct MarkedInt* reader = buf;
printf(" mark: %u, value: %d\n", reader->mark, reader->value);
Apakah mungkin melakukan ini di c? Atau apakah disarankan hanya membaca penanda byte dan int secara terpisah?