static_cast не работает - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь использовать static_cast для преобразования uint8_t* в Some_Type_T*, где Some_Type_T - это struct.

SomeType_T* pTarget = static_cast<SomeType_T*>(pData)

, что выдает ошибку

invalid static_cast from type 'uint8_t [1000] {aka unsigned char [1000]}' to type 'Some_Type_T*'

По сути, я пытаюсь добиться сопоставления буфера (байтового массива) с некоторой структурой.

Я делал это много раз с C-подобным приведением.Но я думаю, что static_cast<> безопаснее.

Не могли бы вы подсказать, почему это не работает?

1 Ответ

0 голосов
/ 14 мая 2018

Название актерского состава будет:

SomeType_T* pTarget = reinterpret_cast<SomeType_T*>(pData);

потому что вы намерены переосмыслить байтовый массив как другой тип объекта.

На самом деле чтение и чтение памяти, как если бы это был тип struct, нарушает правило строгого наложения имен , вызывая неопределенное поведение. Другая проблема состоит в том, что если pData не правильно выровнен для структуры, то вы получите нежелательные результаты.

Если ваш тип структуры легко копируется , тогда вы можете определить структуру и записать в нее данные.

...