1. If you need an array of a small number of chars, I would default to putting them on the stack, i.e. "unsigned char buf", instead of using new. Your sizeof would work if you did that.
You could also use std::array for a fixed size array. That makes it much harder to forget to release the dynamic memory, and sizing should work properly there too. But I agree, for small stuff like this, stack allocation would probably be fine.