Если вы ищете реверсирование буферов с терминацией NULL, большинство решений, опубликованных здесь, в порядке. Но, как уже заметил Тим Фарли, эти алгоритмы будут работать только в том случае, если допустимо предположить, что строка является семантически массивом байтов (то есть однобайтовых строк), что, на мой взгляд, является неверным предположением.
Возьмем, к примеру, строку «año» (год на испанском языке).
Кодовые точки Unicode: 0x61, 0xf1, 0x6f.
Рассмотрим некоторые из наиболее часто используемых кодировок:
Latin1 / iso-8859-1 (однобайтовая кодировка, 1 символ - 1 байт и наоборот):
Оригинал:
0x61, 0xf1, 0x6f, 0x00
Реверс:
0x6f, 0xf1, 0x61, 0x00
Результат в порядке
UTF-8
Оригинал:
0x61, 0xc3, 0xb1, 0x6f, 0x00
Реверс:
0x6f, 0xb1, 0xc3, 0x61, 0x00
Результат - бред и недопустимая последовательность UTF-8
UTF-16 Big Endian:
Оригинал:
0x00, 0x61, 0x00, 0xf1, 0x00, 0x6f, 0x00, 0x00
Первый байт будет обрабатываться как NUL-терминатор. Реверс не будет.
UTF-16 Little Endian:
Оригинал:
0x61, 0x00, 0xf1, 0x00, 0x6f, 0x00, 0x00, 0x00
Второй байт будет обрабатываться как NUL-терминатор. Результат будет 0x61, 0x00, строка, содержащая символ «a».