У меня есть указатель на массив uint8_t. Каждые 2 элемента на самом деле представляют собой uint_16_t
Либо у вас есть массив uint8_t
, либо у вас действительно массив uint_16_t
. Это не может быть и другое.
uint16_t *Dst16Rgb = reinterpret_cast<uint16_t*>(Dst8Rgb);
Непрямое обращение через указатель переинтерпретации будет иметь неопределенное поведение, поскольку по указанному адресу нет объекта uint16_t
.
Даже еслиВы отключаете строгий псевдоним, UB все еще существует, если только вы не гарантируете, что байтовый массив достаточно выровнен для uint_16_t
.
, есть ли способ указать reinterpret_cast, если я хочу сделать это на маленьком или большомendian?
Нет. Данные всегда реинтерпретируются с прямым порядком байтов. Если входные байты имеют различные порядковые номера, тогда результат будет «неправильным».
Вы должны знать порядковый номер входных данных. Вы можете читать байты как многобайтовое целое, не зная собственного порядка байтов, сдвигая и маскируя.