Имеется:
char s1 = 'Ю';
wchar_t s2 = 'ж';
Необходимо в буфер char*
или wchar_t*
поместить hex-значение этих символов.
Т.е. необходимо получить: %d0%ae и %d0%b6
Как это правильно сделать?
Максимум, что удалось получить - 042E и 0436. Дальше - не знаю как...
Доп.-1: Как я получаю 0436 по символу 'ж':
wchar_t test_string[] = L"жизнь";
unsigned long ul = test_string[0];
wchar_t hex_buffer[32];
swprintf(hex_buffer, L"0%02x", ul);
В результате получаем 0436, что в таблице UTF-символов соответствует маленькой буквой "ж".
Теперь необходимо получить hex-значение этого символа, опять же из таблицы - %d0%b6 в буфер wchar_t*
.
Вам нужно преобразовать строку в UTF-8 перед тем, как получать hex-представление. Можно использовать, например, codecvt_utf8_utf16:
#include <stdio.h>
#include <tchar.h>
#include <locale.h>
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
wchar_t wide_str[] = L"жизнь";
wchar_t hex_buffer[256] = L"";
wchar_t buf[32];
//преобразуем строку в UTF-8
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> utf16conv;
auto utf8_str = utf16conv.to_bytes(wide_str);
//преобразуем UTF-8 в hex-представление
for(int i=0;i<utf8_str.length();i++){
swprintf(buf, L"%%%x",(unsigned int)(unsigned char)(utf8_str.c_str()[i]));
wcscat(hex_buffer,buf);
}
wprintf(L"%s = %s\n",wide_str,hex_buffer);
getchar();
return 0;
}
// Результат:
//
// жизнь = %d0%b6%d0%b8%d0%b7%d0%bd%d1%8c
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можно ли как то прочитать датаграмму из сокета по частям? Работаю с qudpsocketГрубо говоря мне нужно пустить сокет через цепочку обработчиков,...
Делаю простейшие задачиПроблема в том, что я пока не знаю, как сделать множественный цикл (т
Перегрузка операторов крайне удобная возможность языка С++Ведь можем написать: