Use:
unsigned short numOFBlocks = *(unsigned short *)freeBlockSize;
But be careful: this will work if the endianess of the data you have in freeBlockSize
is the same endianess of your machine, which could or could not be the case, depending on the source of the data stored in that vector.
UPDATE: There's a certain risk of accessing a misaligned pointer using this approach, so here you have another method that circunvent this issue:
unsigned short numOfBlocks = ((freeBlockSize[1] << 8) &0xFF00) | (freeBlockSize[0] & 0xFF);
This will take the 16-bit number pointed by freeBlockSize as a LE number, and will store it into numOfBlocks, in host endian format. The previous method wasn't take the host endian into account, and therefore it only worked if the data stored in freeBlockSize was in the same format as host data.