Я портирую библиотеку, которая манипулирует необработанными байтовыми данными в виде файла .vxl из C в Java. В C функции передается "unsigned char *". Какой тип лучше всего использовать в Java? (Byte []?)
Кроме того, почему код C получает доступ к "unsigned char *" как массиву местами, хотя он не определен как он?
Код:
MapData * load_vxl(unsigned char * v)
{
MapData * map = new MapData;
if (v == NULL)
return map;
int x,y,z;
for (y=0; y < 512; ++y) {
for (x=0; x < 512; ++x) {
for (z=0; z < 64; ++z) {
map->geometry[get_pos(x, y, z)] = 1;
}
z = 0;
for(;;) {
int *color;
int i;
int number_4byte_chunks = v[0];
int top_color_start = v[1];
int top_color_end = v[2]; // inclusive
int bottom_color_start;
int bottom_color_end; // exclusive
int len_top;
int len_bottom;
for(i=z; i < top_color_start; i++)
map->geometry[get_pos(x, y, i)] = 0;
color = (int *) (v+4);
for(z=top_color_start; z <= top_color_end; z++)
map->colors[get_pos(x, y, z)] = *color++;
len_bottom = top_color_end - top_color_start + 1;
// check for end of data marker
if (number_4byte_chunks == 0) {
// infer ACTUAL number of 4-byte chunks from the length of the color data
v += 4 * (len_bottom + 1);
break;
}
// infer the number of bottom colors in next span from chunk length
len_top = (number_4byte_chunks-1) - len_bottom;
// now skip the v pointer past the data to the beginning of the next span
v += v[0]*4;
bottom_color_end = v[3]; // aka air start
bottom_color_start = bottom_color_end - len_top;
for(z=bottom_color_start; z < bottom_color_end; ++z) {
map->colors[get_pos(x, y, z)] = *color++;
}
}
}
}
return map;
}