Другие языки программирования и технологии
Программирование на с++, как написать кодировщик?
Задача: Пользователь вводит текст, программа читает этот текст и заменяет каждый символ на определённую пару цифр, и выводит этот переведенный текст. Как это сделать?
Пару _цифр_ - будут проблемы при использовании символов в двухбайтовой кодировке ;) + всего 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

Простейший пример каждый символ переводится в 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

смотри пример как перевести текст 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;
}
по сути это и есть пример кодирования/раскодирования
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;
}
Похожие вопросы
- Программирование ардуино-велокомпьютера. Как написать ос?
- Программирование на Си. нужно написать прогу
- Задание_Кто соображает в программировании на паскале? Надо написать небольшую программу, а я в предмете плохо понимаю))
- Программирование С++. Лабу нужно написать, а я не очень смекаю, что делать с буквами.
- Как написать новый язык программирования
- Почему бы не написать язык программирования полностью на Русском языке ?
- Как написали первую программу для программирования?
- Как была написана первая программа/язык программирования?
- Помогите написать программу на любом языке программирования
- помогите кто дружит с паскалем! задание : напишите на языке программирования . Дано ...