С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
1 / 1 / 1
Регистрация: 07.08.2015
Сообщений: 58

Есть ли в С++ аналог функции Encoding.UTF8.GetBytes(plainText) из С#?

18.11.2016, 19:27. Показов 5567. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые ГУРУ!

Переписываю свой код из С# на С++
Необходимо строку типа string перевести в vector<unsigned char>
Но загвоздка в том, что строка всегда содержит и латинские символы и кирилицу
и в vector идет однобайтовое представление символов кирилицы

Каким образом в С++ можно записать в vector кирилицу в двубайтной кодировке

в С# я делал следующее (есть штатная функция):
C#
1
2
string plainText = "FirstName=Николай";
var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
и в окне отладке я получал нужный мне результат:
- plainTextBytes {byte[24]} byte[]
[0] 70 byte
[1] 105 byte
[2] 114 byte
[3] 115 byte
[4] 116 byte
[5] 78 byte
[6] 97 byte
[7] 109 byte
[8] 101 byte
[9] 61 byte
[10] 208 byte Дальше кирилица в двубайтной кодировке
[11] 157 byte
[12] 208 byte
[13] 184 byte
[14] 208 byte
[15] 186 byte
[16] 208 byte
[17] 190 byte
[18] 208 byte
[19] 187 byte
[20] 208 byte
[21] 176 byte
[22] 208 byte
[23] 185 byte


В с++ я делаю следующее
C++
1
2
string plainText = "FirstName=Николай";
vector<unsigned char> plainTextBytes(plainText.begin(), plainText.end());
В окне отладки:
- plainTextBytes { size=17 } std::vector<unsigned char,std::allocator<unsigned char> >
[size] 17 int
[capacity] 17 int
[0] 70 'F' unsigned char
[1] 105 'i' unsigned char
[2] 114 'r' unsigned char
[3] 115 's' unsigned char
[4] 116 't' unsigned char
[5] 78 'N' unsigned char
[6] 97 'a' unsigned char
[7] 109 'm' unsigned char
[8] 101 'e' unsigned char
[9] 61 '=' unsigned char
[10] 205 'Н' unsigned char Дальше кирилица в однобайтовой кодировке
[11] 232 'и' unsigned char
[12] 234 'к' unsigned char
[13] 238 'о' unsigned char
[14] 235 'л' unsigned char
[15] 224 'а' unsigned char
[16] 233 'й' unsigned char

Мое гугление ничего конкретного кроме WideCharToMultiByte, не выдало.
А с параметрами этой функции я что-то притупил...

Может есть еще что-то штатное как в С#?

Заранее благодарен всем откликнувшимся
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2016, 19:27
Ответы с готовыми решениями:

Операция обратная Encoding.GetBytes()
string str = &quot;21&quot;; byte send2 = Encoding.ASCII.GetBytes(str); Console.Write(send2); Выводит &quot;49&quot;. Как из этого обратно получить...

Конвертирование строки в байты через getBytes(encoding), странные результаты
public static void main(String args) throws UnsupportedEncodingException { String s0=&quot;H\u00ebllo&quot;; String s1=&quot;Hëllo&quot;; ...

Какую кодировку получаем от преобразования Encoding.Unicode.GetBytes(data)
Коллеги, помогите, кто чем может, сами мы не местные... Есть некоторый клиент, написанный на C#, который делает вот такое...

7
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.11.2016, 19:44
Лучший ответ Сообщение было отмечено arbit как решение

Решение

Цитата Сообщение от arbit Посмотреть сообщение
string plainText = "FirstName=Николай";
Никогда не задумывался о том, что такой подход зависит от кодировки файла исходника?
В C# string хранит UTF-16. std::string - это последовательность char (которая может хранить в том числе и utf-8). Аналог С# string в C++ - это std::wstring.

Цитата Сообщение от arbit Посмотреть сообщение
Может есть еще что-то штатное
Учитывая вышесказанное:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <codecvt>
#include <string>
 
int main()
{
     std::wstring utf16String = L"FirstName=Николай";
    
     std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
 
     std::string utf8String = convert.to_bytes( utf16String );
}
1
1 / 1 / 1
Регистрация: 07.08.2015
Сообщений: 58
18.11.2016, 20:06  [ТС]
DrOffset, спасибо большое!

string plainText = "FirstName=Николай";
Никогда не задумывался о том, что такой подход зависит от кодировки файла исходника?"
Это я для примера написал.
На самом деле подобные данные будут передаваться из С# в dll на С++
в которой будет проводиться шифрование. Решил вынести этот код в С++
А из шарпа будет идти конечно utf16

Еще раз спасибо за помощь!
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.11.2016, 20:09
Цитата Сообщение от arbit Посмотреть сообщение
На самом деле подобные данные будут передаваться из С# в dll на С++
Ну тогда ты наверное в курсе, что С++-ные объекты через границу dll лучше не передавать, а в случае, если взаимодействие будет с другим языком - и подавно, что нужно ограничиться типами из С-подмножества?
0
1 / 1 / 1
Регистрация: 07.08.2015
Сообщений: 58
18.11.2016, 21:18  [ТС]
С++-ные объекты через границу dll лучше не передавать
А если их оформить json строкой и передавать маршалингом?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.11.2016, 21:29
Цитата Сообщение от arbit Посмотреть сообщение
А если их оформить json строкой и передавать маршалингом?
Зависит от задачи.
Заочно трудно сказать. Но в принципе можно. Любая сериализация подойдет.
Но вообще, обычно, это лишнее, можно большинство потребностей уложить в минималистичный сишный интерфейс, который отлично стыкуется с каким угодно языком. Советую, прежде чем принимать решение, не торопиться и не переусложность без необходимости.
0
1 / 1 / 1
Регистрация: 07.08.2015
Сообщений: 58
18.11.2016, 21:39  [ТС]
Например данные из базы, расшифрованные в dll на С++, и отправленные в впользовательский интерфейс на шарпе?

Добавлено через 1 минуту
Можно будет обратиться лично когда дойду до этого участка кода?
0
18.11.2016, 22:15

Не по теме:

Цитата Сообщение от arbit Посмотреть сообщение
Можно будет обратиться лично когда дойду до этого участка кода?
Лучше создать новую тему с вопросом.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2016, 22:15
Помогаю со студенческими работами здесь

Почему реализация ГОСТ 89 работает с Encoding.UTF8 и не работает с Encoding.ASCII?
Класс GOSTCrypto //S-блок protected byte S_Block = { new byte {...

Аналог GetBytes() для типа данных Bitmap
К примеру у стринговых данных есть такая функция для получения последовательности байтов Encoding.Default.GetBytes(s); а есть ли что...

Есть ли аналог функции gets из си?
есмть в паскале аналог функции gets() из си?

Есть ли аналог функции getchar ()
Помогите пожалуйста! Есть ли в QBasic аналог функции getchar() из C?

Есть ли аналог функции moveto из С++
В с++ есть такая функция moveto Функция moveto() перемещает текущую позицию в точку с координатами х,у относительно текущей области...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru