sizeof(wchar_t) is not guaranteed to be 2.
You seem to assume that every second byte in a wchar_t-string is always zero. This is also not the case. Wouldn't make any sense, would it?
You will have to interpret each wchar individually depending on the used encoding.
If you don't want to ask your OS follow LJBorges.
Otherwise maybe Boost.Locale can be of help, or ICU... There are quite a few unicode-libs out there.