Я пытаюсь преобразовать поток данных в структуру, поскольку поток данных состоит из сообщений с фиксированной шириной, и каждое сообщение также имеет полные определенные поля с фиксированной шириной. Я планировал создать структуру, а затем использовать reinterpret_cast для приведения указателя на поток данных к структуре для получения полей. Я сделал тестовый код и получил странные результаты. Может ли кто-нибудь объяснить, почему я получаю это или как исправить код. (поток данных будет смешанным двоичным и буквенно-цифровым, но я просто тестирую строки)
#pragma pack(push,1)
struct Header
{
char msgType[1];
char filler[1];
char third[1];
char fourth[1];
};
#pragma pack(pop)
int main(void)
{
cout << sizeof(Header) << endl;
char* data = "four";
Header* header = reinterpret_cast<Header*>(data);
cout << header->msgType << endl;
cout << header ->filler << endl;
cout << header->third << endl;
cout << header->fourth << endl;
return 0;
}
Результат, который приближается,
4
four
our
ur
r
Я думаю, что четыре, наш и ур печатаются, так как он не может найти нулевой терминатор. Как обойти проблему нулевого терминатора?