#include <stdio.h>
#include <inttypes.h>
#include <stdbool.h>
inline size_t min(size_t a, size_t b)
{
return a < b ? a : b;
}
void print_einzelpaket(const uint8_t* paket, size_t paket_size, size_t paket_nominal_size, bool fill_with_zeroes)
{
size_t i;
for(i = 0; i < paket_size; ++i)
if(fill_with_zeroes)
for( ; i < paket_nominal_size; ++i)
}
void print_gesamtpaket(const uint8_t* paket, size_t total_size, size_t paket_nominal_size, bool fill_with_zeroes)
{
if (paket_nominal_size == 0)
return; // sonst endlossschleife
size_t idx;
for(idx = 0; idx < total_size; idx += paket_nominal_size) // an die anfaenge der einzelpakete gehen
{
//wie groß ist dieses einzelne paket?
size_t bytes_to_do = total_size - idx;
size_t this_paket_size = min(bytes_to_do, paket_nominal_size);
print_einzelpaket(paket+idx, this_paket_size, paket_nominal_size, fill_with_zeroes);
}
}
int main(void)
{
uint8_t mein_paket[] = {1,2,3,4,5,6,7,8,9,0};
size_t gesamt = sizeof(mein_paket) / sizeof(mein_paket[0]);
size_t einzeln = 3;
printf("paket ist %d gross, einzelpakete sind %d lang\n", gesamt
, einzeln
); print_gesamtpaket(mein_paket, gesamt, einzeln, true);
print_gesamtpaket(mein_paket, gesamt, einzeln, false);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8c3RkYm9vbC5oPgoKaW5saW5lIHNpemVfdCBtaW4oc2l6ZV90IGEsIHNpemVfdCBiKQp7CiAgICByZXR1cm4gYSA8IGIgPyBhIDogYjsKfQoKdm9pZCBwcmludF9laW56ZWxwYWtldChjb25zdCB1aW50OF90KiBwYWtldCwgc2l6ZV90IHBha2V0X3NpemUsIHNpemVfdCBwYWtldF9ub21pbmFsX3NpemUsIGJvb2wgZmlsbF93aXRoX3plcm9lcykKewogICAgcHJpbnRmKCJFaW56ZWxwYWtldDogIik7CiAgICBzaXplX3QgaTsKICAgIGZvcihpID0gMDsgaSA8IHBha2V0X3NpemU7ICsraSkKICAgICAgICBwcmludGYoIiU0ZCIsIHBha2V0W2ldKTsKICAgIGlmKGZpbGxfd2l0aF96ZXJvZXMpCiAgICAgICAgZm9yKCA7IGkgPCBwYWtldF9ub21pbmFsX3NpemU7ICsraSkgICAKICAgICAgICAgICAgcHJpbnRmKCIgICAjIik7CiAgICBwcmludGYoIlxuIik7Cn0KCnZvaWQgcHJpbnRfZ2VzYW10cGFrZXQoY29uc3QgdWludDhfdCogcGFrZXQsIHNpemVfdCB0b3RhbF9zaXplLCBzaXplX3QgcGFrZXRfbm9taW5hbF9zaXplLCBib29sIGZpbGxfd2l0aF96ZXJvZXMpCnsKICAgIGlmIChwYWtldF9ub21pbmFsX3NpemUgPT0gMCkKICAgICAgICByZXR1cm47IC8vIHNvbnN0IGVuZGxvc3NzY2hsZWlmZQogICAgc2l6ZV90IGlkeDsKICAgIGZvcihpZHggPSAwOyBpZHggPCB0b3RhbF9zaXplOyBpZHggKz0gcGFrZXRfbm9taW5hbF9zaXplKSAvLyBhbiBkaWUgYW5mYWVuZ2UgZGVyIGVpbnplbHBha2V0ZSBnZWhlbgogICAgewogICAgICAgIC8vd2llIGdyb8OfIGlzdCBkaWVzZXMgZWluemVsbmUgcGFrZXQ/CiAgICAgICAgc2l6ZV90IGJ5dGVzX3RvX2RvID0gdG90YWxfc2l6ZSAtIGlkeDsKICAgICAgICBzaXplX3QgdGhpc19wYWtldF9zaXplID0gbWluKGJ5dGVzX3RvX2RvLCBwYWtldF9ub21pbmFsX3NpemUpOwogICAgICAgIHByaW50X2VpbnplbHBha2V0KHBha2V0K2lkeCwgdGhpc19wYWtldF9zaXplLCBwYWtldF9ub21pbmFsX3NpemUsIGZpbGxfd2l0aF96ZXJvZXMpOwogICAgfQp9CgppbnQgbWFpbih2b2lkKQp7CiAgICB1aW50OF90IG1laW5fcGFrZXRbXSA9IHsxLDIsMyw0LDUsNiw3LDgsOSwwfTsKICAgIHNpemVfdCBnZXNhbXQgPSBzaXplb2YobWVpbl9wYWtldCkgLyBzaXplb2YobWVpbl9wYWtldFswXSk7CiAgICBzaXplX3QgZWluemVsbiA9IDM7CiAgICBwcmludGYoInBha2V0IGlzdCAlZCBncm9zcywgZWluemVscGFrZXRlIHNpbmQgJWQgbGFuZ1xuIiwgZ2VzYW10LCBlaW56ZWxuKTsKICAgIHByaW50X2dlc2FtdHBha2V0KG1laW5fcGFrZXQsIGdlc2FtdCwgZWluemVsbiwgdHJ1ZSk7CiAgICBwcmludGYoIm5vY2htYWxcbiIpOwogICAgcHJpbnRfZ2VzYW10cGFrZXQobWVpbl9wYWtldCwgZ2VzYW10LCBlaW56ZWxuLCBmYWxzZSk7CiAgICByZXR1cm4gMDsKfQo=