I don't think it is converted to ASCII. But you are wirting only one byte to the file (the lower byte of your wide character). To write all character bytes use:
write_on.write(buf, sizeof(wchar_t));
[EDIT]
See somments. The universal solution should be:
write_on.write((char*)buf, wcslen(buf) * sizeof(wchar_t));
With your example string "ซ" a single Unicode character (the Thai character SO SO) is written to file. Assuming your platform uses UTF-16LE encoding for wide characters (like Windows), the Unicode code point is 0x0E0B and the binary file content will be 0x0B followed by 0x0E.
When reading such files later you must know what kind of encoding is used. Or more general: You must know how to interpret the file content with each file you want to read.
If you interpret the file as ASCII (or some 8-bit text), you will read the ASCII control characters 0x0B and 0x0E (VT and SO). But if you interpret it as UTF16-LE, you will get the code point 0x0E0B.
[/EDIT]