Skip to content

Instantly share code, notes, and snippets.

@nielsmh
Created March 17, 2018 11:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nielsmh/841ec60c99289741a44392d6627644c8 to your computer and use it in GitHub Desktop.
Save nielsmh/841ec60c99289741a44392d6627644c8 to your computer and use it in GitHub Desktop.
Which is preferable?
static void WriteVariableLen(FILE *f, uint32 value)
{
if (value < 0x7F) {
byte tb = value;
fwrite(&tb, 1, 1, f);
} else if (value < 0x3FFF) {
byte tb[2];
tb[1] = value & 0x7F; value >>= 7;
tb[0] = (value & 0x7F) | 0x80; value >>= 7;
fwrite(tb, 1, sizeof(tb), f);
} else if (value < 0x1FFFFF) {
byte tb[3];
tb[2] = value & 0x7F; value >>= 7;
tb[1] = (value & 0x7F) | 0x80; value >>= 7;
tb[0] = (value & 0x7F) | 0x80; value >>= 7;
fwrite(tb, 1, sizeof(tb), f);
} else if (value < 0x0FFFFFFF) {
byte tb[4];
tb[3] = value & 0x7F; value >>= 7;
tb[2] = (value & 0x7F) | 0x80; value >>= 7;
tb[1] = (value & 0x7F) | 0x80; value >>= 7;
tb[0] = (value & 0x7F) | 0x80; value >>= 7;
fwrite(tb, 1, sizeof(tb), f);
}
}
static void WriteVariableLen(FILE *f, uint32 value)
{
byte tb[4];
tb[3] = value & 0x7F; value >>= 7;
tb[2] = (value & 0x7F) | 0x80; value >>= 7;
tb[1] = (value & 0x7F) | 0x80; value >>= 7;
tb[0] = (value & 0x7F) | 0x80; value >>= 7;
if (tb[0] > 0) fwrite(tb + 0, 1, 4, f);
else if (tb[1] > 0) fwrite(tb + 1, 1, 3, f);
else if (tb[2] > 0) fwrite(tb + 2, 1, 2, f);
else fwrite(tb + 3, 1, 1, f);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment