Как создать указатель определенного размера, чтобы он указывал на определенный адрес в памяти

Я хочу перемещаться по шестнадцатеричному дампу по одному байту за раз, используя указатель, пока не найду определенную последовательность байтов длиной X байтов. Для этого мне нужно привести указатель к размеру X байт. Например, указатель на размер 3 байта. Я знаю, что могу просто использовать что-то вроде uint16_t, если я хочу, чтобы это было 2 байта, или uint32_t, если я хочу, чтобы это было 4 байта. Но ни один из них не работает для этого.

Я должен начать с указания на начало блока памяти, местоположение которого у меня есть, чтобы я мог перемещаться по нему по одному байту за раз. Как я могу сделать это, не теряя эту позицию?


person user3743206    schedule 04.04.2015    source источник


Ответы (1)


Это невозможно. Если в вашей системе нет типов, использующих 3 байта памяти, у вас не может быть указателя на такой тип. Вместо этого вы должны использовать unsigned char * и читать байты из того места, на которое он указывает, и что-то с ними делать.

Например, если эти 3 байта являются младшими 3 байтами int в формате с прямым порядком байтов, вы можете написать:

unsigned char *ptr = /* find the right location */;

unsigned int foo = ptr[0] * 0x10000u + ptr[1] * 0x100u + ptr[2];
person M.M    schedule 04.04.2015