Стандартного способа конвертации нет. Теоретически std::locale, но реально — возможно, как-то и работает на Linux, на Windows — фигвам.
Для преобразования есть libiconv, но я с ней не работал.
Варианты…
• Битая память.
• Странная ошибка в прошивке какой-нибудь «железки».
Вот совсем недавно на хабре один товарищ сказал, что в очень специфичных условиях винт Fujitsu портит один бит.
Давно я хакерством не занимался, неспособен быстро восстановить картинку. Почти уверен, что там один байт испорчен.
Олег Цилюрик: Шаблонных функций просто не могло быть в RTL, потому что они должны храниться в полном исходнике в хедерном файле, чтобы компилятор мог их специализировать.
Всё, что либо не шаблонное, либо до конца специализировано — есть там, разумеется.
И вообще, RTL — обычная себе библиотека, только автоматически подключается к любой программе.
Олег Цилюрик: Ну да, malloc — библиотечный вызов и эта функция точно в RTL. Но new — это также вызов некой функции (выделение памяти), которая обязана быть где-то в RTL, а потом — вызов конструктора, он-то уж где попадётся.
Что такое «внутренние функции для обслуживания точки входа»? Под DOS это могло быть перехватить пару прерываний наподобие Ctrl+Break. Получить командную строку и преобразовать её в argc и argv. В консольной программе — создать консоль, и т.д. (мало кто знает, что GUI-программы Windows тоже имеют потоки ввода, вывода и ошибок — просто консольного окна у них нет). Перевести библиотеку в однопоточный режим… В общем, они выполняются до main() и после него.
Для преобразования есть libiconv, но я с ней не работал.