logo separator

[mkgmap-dev] [PATCH] Bug in label encoding

From Steve Ratcliffe steve at parabola.me.uk on Mon Feb 8 09:46:30 GMT 2010

On 07/02/10 23:47, Ronny Klier wrote:
> I think there is a bug in label encoding in Format6Encoder. For some
> string length the last encoded byte is not stored.
>
> E.g. having a string "10007" the encoded byte buffer looks like this
>
> [0] [0x86]
> [1] [0x8]
> [2] [0x20]
> [3] [0x9f]
> [4] [0xf0]
>
> The number of stored bytes is 4. So the 0xf0 will not show up in the
> final image file.

I believe the code is correct and the 0xf0 is not required and omitted
on purpose.

A 5 byte string where each character is encoded as 6 bits requires 30
bits of storage which is 3.75 bytes.  There is then a end-of-string
marker which is written as the 6 bit value 0x3f.  However, the end of
string marker is actually variable length and as long as the first two
bits are written you can drop the rest.  So the whole thing fits into
4 bytes which is what is written.

The code is this way because originally I did not realise that the
string terminator was effectively a two bit quantity ie. if the first
two bits are both 1 then the strings ends and you stop reading and
throw away any remaining part of the byte.  You could probably write 2
bits and then round the byte count up instead of writing 6 and
rounding down.

..Steve



More information about the mkgmap-dev mailing list