2015-05-31 1 views
1

Я собираюсь реализовать некоторый алгоритм в motosb. Мне нужно сделать, взять файл и разделить его на более мелкие объекты, а затем разделить объект на еще меньший объект, называемый страницами, как описано на рисунке ниже.Как разбить массив на определенный размер

После этого страница будет передаваться по беспроводному каналу на другой канал. Один за раз назывался пакетом.

У меня есть массив с 2000 байт, которые я хочу, чтобы пролилась вверх, как показано на рисунке, требование страницы является то, что пакет должен быть не менее 110 байт каждый или меньше.

nx_uint16_t file[1000]; 

    int j, A; 
for (j = 0;j<1000;j++) 
      { 

       int ra = (rand() +1) % 10;     

      } 
A = sizeof(file); 
printf("\n Array size: %d Bytes", A); 

Любая помощь будет принята с благодарностью.

ответ

1

Если у вас есть три определенных размера для объекта, страницы и пакета, используйте три массива указанных размеров и скопируйте их последовательно.

Поскольку у вас есть 2000 байт, разделение его на 110 байтов означает, что будут пакеты с потоком (2000/110). Однако ваш пакет может содержать заголовки или контрольные суммы или оба (данные префикса и суффикса).

byte array[2000]; 
byte packet[110]; 
unsigned packet_count = 0; 
for(int i = packet_count * 110, j = 0; j < 110; ++j, ++i) 
    packet[j] = array[i] ; 
++packet_count ; 
forward(packet); 

Обратите внимание, что i начинается с packet_count * 110, тогда как j движется от 0 до 109.

+0

У меня есть буфер/массив из 2000 байт и вы хотите передать 110 байтов за раз и до тех пор, пока не будут переданы все 2000 байт. Вы сказали, что это даст 2000/110 = 18,18 кусков. Но как насчет 0,18? Я не хочу работать с поплавками. – RamHS

+0

У вас будет 19 пакетов. Последний пакет содержит только 0,18 оставшуюся часть данных. Вы можете применить некоторое дополнение, чтобы сделать его 110 байтами. –

Смежные вопросы