проблема в следующем
когда встречается символ в один байт, то по сути у нас есть старший байт нулевой и младший совпадает с кодом аски.
если больше одного байта (русские символы) то мне необходимо разбивать их , это я вроде разобрался как делать
еще дополню примером например у нас есть символ
с кодом в Аски
1056
0000010000100000
после того как разложим по байтам у нас будет
старший байт (100)
4
младший (100000)
32
нули перед ними улетучиваются посему не знаю как собрать их(, до этого с байтами толком не работал
Здравствуйте, paxerus, Вы писали:
P>мне необходимо зашифровать ее методом XOR и далее перегнать в base64 P>в принципи все понятно и как шифровать и даже функция перегона в base 64 есть
А нельзя ли наоборот? Сначала закодировать в base64, а потом зашифровать?
P>проблема в следующем P>когда встречается символ в один байт, то по сути у нас есть старший байт нулевой и младший совпадает с кодом аски. P>если больше одного байта (русские символы) то мне необходимо разбивать их , это я вроде разобрался как делать
А нельзя просто привести строку к const unsigned char и работать с байтами?
Здравствуйте, rising_edge, Вы писали:
_>Здравствуйте, paxerus, Вы писали:
P>>мне необходимо зашифровать ее методом XOR и далее перегнать в base64 P>>в принципи все понятно и как шифровать и даже функция перегона в base 64 есть
_>А нельзя ли наоборот? Сначала закодировать в base64, а потом зашифровать?
нельзя- во первых,во вторых разницы по моему никакой не будет
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, paxerus, Вы писали: P>>std::wstring MC>Ты уверен, что у тебя именно utf8? Просто utf8 в wstring не кладут.
да utf8
вот пример
Группа 1
тоже самое utf8
Группа 1
Здравствуйте, paxerus, Вы писали:
P>проблема в следующем P>когда встречается символ в один байт, то по сути у нас есть старший байт нулевой и младший совпадает с кодом аски. P>если больше одного байта (русские символы) то мне необходимо разбивать их , это я вроде разобрался как делать
Ваще говоря, utf-8 использует разное количество байтов для кодирования разных символов. При этом первая половина ASCII-таблицы передается как есть, по одному байту на символ. Utf-8 никогда не использует нулевой байт в качестве префикса.
P>непонятн как потом при дешифрации собрать 2 байта которые кодируют один символ
Читаете побайтово. Глядя на первый байт, вы можете узнать, сколько всего байтов в символе. Дальше вычитываете их все и собираете символ.
Utf-8 нельзя "собирать" с середины (с произвольного места), если вы не знаете точно, что произвольное место попадает на начало символа. А не в середину его.
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, paxerus, Вы писали:
P>>теперь как обратно сделать подскажите плз P>>у меня после декодировки base64 есть массив байт как теперь собрать строку? P>>std::vector<BYTE> bt;
AG>
AG>std::wstring str;
AG>if (!bt.empty())
AG>{
AG> wchar_t * begin = reinterpret_cast<wchar_t*>(&bt[0]);
AG> str.assign(begin, begin + bt.size / sizeof(wchar_t));
AG>}
AG>
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, paxerus, Вы писали:
P>>проблема в следующем P>>когда встречается символ в один байт, то по сути у нас есть старший байт нулевой и младший совпадает с кодом аски. P>>если больше одного байта (русские символы) то мне необходимо разбивать их , это я вроде разобрался как делать
Pzz>Ваще говоря, utf-8 использует разное количество байтов для кодирования разных символов. При этом первая половина ASCII-таблицы передается как есть, по одному байту на символ. Utf-8 никогда не использует нулевой байт в качестве префикса.
P>>непонятн как потом при дешифрации собрать 2 байта которые кодируют один символ
Pzz>http://en.wikipedia.org/wiki/UTF-8
Pzz>Читаете побайтово. Глядя на первый байт, вы можете узнать, сколько всего байтов в символе. Дальше вычитываете их все и собираете символ.
Pzz>Utf-8 нельзя "собирать" с середины (с произвольного места), если вы не знаете точно, что произвольное место попадает на начало символа. А не в середину его.
Не могли бы вы разъяснить на примере какого либо одного русского ASCII символа?
у себя ошибку вроде отыскал не доконца пока еще ,где то строку видимо обрезает но это уже ерунда,я найду где , главное что хотяб часть строки уже работает
ВСЕМ огромное спасибо за помощь,как отлажу приложу функцию
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, paxerus, Вы писали:
P>>Не могли бы вы разъяснить на примере какого либо одного русского ASCII символа?
Pzz>Русский символ 'А' кодируется как 0xd0 0x90
Pzz>Первый байт выглядит в двоичном виде как 11010000. Второй как 10010000
Pzz>Смотрим на табличку в википедии за расшифровкой. Нам подходит вторая строка, т.к. первый байт начинается с 110:
Pzz>110yyyxx 10xxxxxx
Pzz>yyy = 100, xxx = 00010000
Pzz>Переводим назад в hex: yyy = 0x04, xxx = 0x10
Pzz>Складываем yyy << 8 + xxx, получаем 0x0410, что соответствует UNICODE-кодировке буквы 'А'.
спасибо за разъяснения постораюсь во всем до конца разбраться чтоб дальше было легче