wmlc stands for WML compiled. At the time of WAP 1 the creators thought that bandwidth and memory were a problem (can you blame them?) and created wmlc to try to reduce the amount of data transferred to a minimum. This was achieved using the WAP gateway as a proxy (this was a requirement for WAP 1) and compressing the markup before forwarding it to the device. This solution did not impact site developers and provided a lower bandwidth and smaller memory usage for the devices and the GSM network.
wmlc is basically a binary version of wml, all tags are changed into a binary counter part while text and URL‘s are left as they were. This provided a decent improvement in size while not requiring big processor work, it actually simplified it. gzip or compress, on the other side, would have required some work from the CPU to decompress the data received.
Compressed markup has been abandoned in WAP 2 and XHTML-MP is now delivered as-is. This has turned the “mobile markup” into something more similar to the web technology, but has given something to optimization.
If you need to convert WML or other XML into binary code you should look at the very good libwbxml.