fork download
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3. #include <stdbool.h>
  4.  
  5. inline size_t min(size_t a, size_t b)
  6. {
  7. return a < b ? a : b;
  8. }
  9.  
  10. void print_einzelpaket(const uint8_t* paket, size_t paket_size, size_t paket_nominal_size, bool fill_with_zeroes)
  11. {
  12. printf("Einzelpaket: ");
  13. size_t i;
  14. for(i = 0; i < paket_size; ++i)
  15. printf("%4d", paket[i]);
  16. if(fill_with_zeroes)
  17. for( ; i < paket_nominal_size; ++i)
  18. printf(" #");
  19. printf("\n");
  20. }
  21.  
  22. void print_gesamtpaket(const uint8_t* paket, size_t total_size, size_t paket_nominal_size, bool fill_with_zeroes)
  23. {
  24. if (paket_nominal_size == 0)
  25. return; // sonst endlossschleife
  26. size_t idx;
  27. for(idx = 0; idx < total_size; idx += paket_nominal_size) // an die anfaenge der einzelpakete gehen
  28. {
  29. //wie groß ist dieses einzelne paket?
  30. size_t bytes_to_do = total_size - idx;
  31. size_t this_paket_size = min(bytes_to_do, paket_nominal_size);
  32. print_einzelpaket(paket+idx, this_paket_size, paket_nominal_size, fill_with_zeroes);
  33. }
  34. }
  35.  
  36. int main(void)
  37. {
  38. uint8_t mein_paket[] = {1,2,3,4,5,6,7,8,9,0};
  39. size_t gesamt = sizeof(mein_paket) / sizeof(mein_paket[0]);
  40. size_t einzeln = 3;
  41. printf("paket ist %d gross, einzelpakete sind %d lang\n", gesamt, einzeln);
  42. print_gesamtpaket(mein_paket, gesamt, einzeln, true);
  43. printf("nochmal\n");
  44. print_gesamtpaket(mein_paket, gesamt, einzeln, false);
  45. return 0;
  46. }
  47.  
Success #stdin #stdout 0s 2008KB
stdin
Standard input is empty
stdout
paket ist 10 gross, einzelpakete sind 3 lang
Einzelpaket:    1   2   3
Einzelpaket:    4   5   6
Einzelpaket:    7   8   9
Einzelpaket:    0   #   #
nochmal
Einzelpaket:    1   2   3
Einzelpaket:    4   5   6
Einzelpaket:    7   8   9
Einzelpaket:    0