Предполагая, что _vertexData
здесь NSData
, и вы знаете, какие данные (типы) ожидать в буфере, вы можете перебирать этот блок с помощью свойства .length
NSData.В этом примере каждый блок данных был 32 байта (для хранения 8 x значений с плавающей запятой ), и меня интересовало ведение журнала, начиная с 5-го значения с плавающей запятой
float a,b,c,d; //prepare some values, no need to initialize
// loop thru assuming 8 floats are stored after each other
for (NSUInteger v = 0; v < _vertexData.length; v += sizeof(float)*8 ) {
// set a starting point for the range, here the 5th float
NSUInteger shift = v + (sizeof(float)*4);
// store result in a..
[_vertexData getBytes:&a range:NSMakeRange(shift,sizeof(a))];
// increase the starting point by the size of data before
shift += sizeof(a);
[_vertexData getBytes:&b range:NSMakeRange(shift,sizeof(b))];
shift += sizeof(b);
[_vertexData getBytes:&c range:NSMakeRange(shift,sizeof(c))];
shift += sizeof(c);
[_vertexData getBytes:&d range:NSMakeRange(shift,sizeof(d))];
fprintf(stderr, "r%f, g%f, b%f, a%f \n", a,b,c,d );
}
это можно было бы написать гораздо короче, но ради ясности и с меньшим использованием пропусков лидирующих мисс
возможно, это кому-то поможет