#include #include #include using namespace std; typedef struct Student { uint8_t name[17]; uint16_t year = 2000; float score = 5.0; uint8_t sex : 1; uint16_t courses = 3; Student* starosta = 0; }; void print_in_hex(uint8_t byte) { cout << setfill('0') << setw(2) << hex << (uint16_t)byte << " "; } void print_in_hex(const void* data, size_t size) { for (size_t i = 0; i < size; i++) { cout << setfill('0') << setw(2) << hex << (uint16_t) * ((uint8_t*)data + i) << " "; if ((i + 1) % 16 == 0) cout << endl; } } void print_in_binary(uint8_t byte) { cout << setfill('0') << setw(8) << bitset<8>(byte) << " "; } void print_in_binary(const void* data, size_t size) { for (size_t i = 0; i < size; i++) { cout << setfill('0') << setw(8) << bitset<8>(*((uint8_t*)data + i)) << " "; if ((i + 1) % 4 == 0) cout << endl; } } int main() { Student group[3]; strcpy_s((char*)group[0].name, sizeof(Student::name), "Anton"); group[0].sex = 1; strcpy_s((char*)group[1].name, sizeof(Student::name), "Ivan"); group[1].sex = 0; group[1].starosta = &group[0]; strcpy_s((char*)group[2].name, sizeof(Student::name), "Sergey"); group[2].sex = 1; group[2].starosta = &group[0]; // адрес и размер массива void* groupAddr = &group[0]; cout << "Array 'group' at address "; print_in_hex(&groupAddr, sizeof(void*)); cout << ", size " << dec << sizeof(group) << " bytes"; cout << endl << endl; // адреса и размеры всех элементов массива for (size_t i = 0; i < 3; i++) { void* groupAddr = &group[i]; cout << "group[" << i << "] at address "; print_in_hex(&groupAddr, sizeof(void*)); cout << ", size " << dec << sizeof(group[i]) << " bytes"; cout << endl; } // для всех полей одного из элементов ... cout << endl << "group[1]:" << endl; uint8_t* recordAddr = (uint8_t*)&group[1]; cout << ">>name at address "; uint8_t* fieldAddr = recordAddr + offsetof(Student, name); print_in_hex(&fieldAddr, sizeof(void*)); cout << ", offset " << offsetof(Student, name) << ", size " << dec << sizeof(Student::name) << endl << "Hex: " << endl; print_in_hex(group[1].name, sizeof(Student::name)); cout << endl << "Bin: " << endl; print_in_binary(group[1].name, sizeof(Student::name)); cout << endl; cout << ">>year at address "; fieldAddr = recordAddr + offsetof(Student, year); print_in_hex(&fieldAddr, sizeof(void*)); cout << ", offset " << offsetof(Student, year) << ", size " << dec << sizeof(Student::year) << endl << "Hex: " << endl; print_in_hex(&group[1].year, sizeof(Student::year)); cout << endl << "Bin: " << endl; print_in_binary(&group[1].year, sizeof(Student::year)); cout << endl; cout << ">>score at address "; fieldAddr = recordAddr + offsetof(Student, score); print_in_hex(&fieldAddr, sizeof(void*)); cout << ", offset " << offsetof(Student, score) << ", size " << dec << sizeof(Student::score) << endl << "Hex: " << endl; print_in_hex(&group[1].score, sizeof(Student::score)); cout << endl << "Bin: " << endl; print_in_binary(&group[1].score, sizeof(Student::score)); cout << endl; cout << ">>courses at address "; fieldAddr = recordAddr + offsetof(Student, courses); print_in_hex(&fieldAddr, sizeof(void*)); cout << ", offset " << offsetof(Student, courses) << ", size " << dec << sizeof(Student::courses) << endl << "Hex: " << endl; print_in_hex(&group[1].courses, sizeof(Student::courses)); cout << endl << "Bin: " << endl; print_in_binary(&group[1].courses, sizeof(Student::courses)); cout << endl; cout << ">>starosta at address "; fieldAddr = recordAddr + offsetof(Student, starosta); print_in_hex(&fieldAddr, sizeof(void*)); cout << ", offset " << offsetof(Student, starosta) << ", size " << dec << sizeof(Student::starosta) << endl << "Hex: " << endl; print_in_hex(&group[1].starosta, sizeof(Student::starosta)); cout << endl << "Bin: " << endl; print_in_binary(&group[1].starosta, sizeof(Student::starosta)); cout << endl; // все элементы массива в шестнадцатеричном виде for (size_t i = 0; i < 3; i++) { cout << "group[" << i << "]:" << endl; print_in_hex(&group[i], sizeof(Student)); cout << endl; } return 0; }