handle odd number of bytes better