error: invalid static_cast from type ‘unsigned char*’ to type ‘uint32_t* {aka unsigned int*}’
uint32_t *starti = static_cast<uint32_t*>(&memory[164]);
Я выделил массив символов и хочу прочитать 4 байта как 32-битное целое число, но получаю ошибку компилятора. Я знаю, что могу сдвигать биты, например:
(start[0] << 24) + (start[1] << 16) + (start[2] << 8) + start[3];
И он будет делать то же самое, но это много дополнительной работы.
Можно ли как-то просто преобразовать эти четыре байта в целое число?
uint32_t val = *(uint32_t*)((void*)(memory+164));
- person IdeaHat   schedule 31.03.2014c++
-й. Например, если «память» поступает из файла или из сети, вам нужно беспокоиться о порядке байтов. - person mic_e   schedule 31.03.2014reinterpret_cast
, и он гарантированно сработает. Однако вы не всегда можете разыменовать его. Ваше решение с битовым сдвигом в порядке, как иmemcpy
для объектаuint32_t
. Рекомендуем вам также прочитать это. - person jrok   schedule 31.03.2014reinterpret_cast
просто гораздо более подробно описывает, что он делает. - person Konrad Rudolph   schedule 01.04.2014