Другие языки программирования и технологии

Программирование на с++, как написать кодировщик?

Задача: Пользователь вводит текст, программа читает этот текст и заменяет каждый символ на определённую пару цифр, и выводит этот переведенный текст. Как это сделать?
Пару _цифр_ - будут проблемы при использовании символов в двухбайтовой кодировке ;) + всего 100 символов 00-99, что не покроет полностью даже однобайтовую.

Простейший пример каждый символ переводится в 16ричный вид (2 символа) - если будет Unicode и будет русский язык - соотв. будет больше =):

#include < iostream >
#include < sstream >
#include < algorithm >

using namespace std;

int main(void) {

string s = "hello world";
stringstream ss;

for_each(s.begin(), s.end(), [&](char c) { ss << hex << (unsigned int)c; });

cout << ss.str() << endl;

return 0;
}

P.S: C++ 11
Юра Лесовский
Юра Лесовский
84 764
Лучший ответ
смотри пример как перевести текст ANSI/UTF-8 в UTF-16
по сути это и есть пример кодирования/раскодирования

unsigned int UCS2FromUTF8(const char *s, unsigned int len, wchar_t *tbuf, unsigned int tlen)
{
unsigned int ui=0;
const UCHAR *us = reinterpret_cast<const UCHAR *(s);
unsigned int i=0;
while ((i<len) && (ui<tlen)) {
UCHAR ch = us[i++];
if (ch < 0x80) {
tbuf[ui] = ch;
} else if (ch < 0x80 + 0x40 + 0x20) {
tbuf[ui] = static_cast<wchar_t((ch & 0x1F) << 6);
ch = us[i++];
tbuf[ui] = static_cast<wchar_t(tbuf[ui] + (ch & 0x7F));
} else {
tbuf[ui] = static_cast<wchar_t((ch & 0xF) << 12);
ch = us[i++];
tbuf[ui] = static_cast<wchar_t(tbuf[ui] + ((ch & 0x7F) << 6));
ch = us[i++];
tbuf[ui] = static_cast<wchar_t(tbuf[ui] + (ch & 0x7F));
}
ui++;
}
return ui;
}