Преобразование char[] в string
Наиболее просто, это ознакомиться со списком конструкторов std::string. Или Вы не читаете документацию на то, чем пользуетесь?
30 мая 2016 в 8:19
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Вот краткая выдержка:
Один из способов организовать работу со строками — это использование одномерных массивов типа char . Тогда строка символов – это одномерный массив типа char , заканчивающийся нулевым байтом.
Нулевой байт – это байт, каждый бит которого равен нулю, при этом для нулевого байта определена символьная константа \0 (признак окончания строки, или нуль-терминатор). По нулевому байту функции, работающие со строками, определяют место окончания строки. Если они читают строку, то воспринимают ее только до первого нуль-терминатора; если они создают строку, то записывают нуль-терминатор в ее конец.
char arr[ ] = "Простая проверка"; string str = string(arr); cout
Как перевести символ в строку с бинарным кодом этого символа?
Например, имеется символ A в char.
Как получить char binary, который будет состоять из 8 элементов и в каждом элементе будет бит символа A?
То есть char binary должна быть равной «01100001»
- Вопрос задан более трёх лет назад
- 553 просмотра
6 комментариев
Простой 6 комментариев

Ходят слухи, что сопоставление символа с числом находится в таблице кодировок. Попробуйте скачать ASCII и перевести по ней.
Сергей Горностаев @sergey-gornostaev Куратор тега C
Griboks, не надо ничего скачивать. Вопрос решается в три строки, если можно использовать библиотечные функции, и в 4, если нельзя.
Narts @Narts Автор вопроса
Сергей Горностаев, не подскажите, как именно? Пробовал через битовые операторы, то результат неверный выводит
Практическое руководство. Преобразование между различными типами строк
В этой статье показано, как преобразовать различные типы строк Visual C++ в другие строки.
Типы строк, которые рассматриваются, включают char * , wchar_t* , _bstr_t , CComBSTR , CString и basic_string System.String.
Во всех случаях копия строки производится при преобразовании в новый тип. Любые изменения, внесенные в новую строку, не влияют на исходную строку, и наоборот.
Дополнительные сведения о преобразовании узких и широких строк см. в разделе "Преобразование между узкими строками и широкими строками".
Запуск примеров
Чтобы запустить примеры в Visual Studio 2022, можно создать консольное приложение C++. Или, если вы установили поддержку C++/CLI, можно создать консольное приложение CLR (платформа .NET Framework).
Если вы создаете консольное приложение CLR, вам не нужно вносить следующие изменения в параметры компилятора и отладчика. Однако вам потребуется добавить #include "pch.h" в верхнюю часть каждого примера.
В любом случае добавьте comsuppw.lib в свойства компоновщика >>проекта>дополнительные зависимости.
Если вы создадите консольное приложение C++ для запуска примеров, внесите следующие изменения в проект:
- Добавьте аргументы командной /clr строки в /Zc:twoPhase- свойства>проекта C++>Command Line>Дополнительные параметры.
Параметр /clr конфликтует с некоторыми коммутаторами компилятора, заданными при создании проекта консольного приложения C++ Windows. Следующие ссылки содержат инструкции по тому, где в интегрированной среде разработки можно отключить конфликтующие коммутаторы:
- Отключение (установка базовых проверок среды выполнения в значение по умолчанию): параметры проекта>C/C++>Code Generation>Basic Runtime Checks Default> /RTC1
- /EHs Отключение (модель обработки исключений): свойства> проекта C/C++>Code Generation>enable C++ Exceptions No>
- Exchange /Zi (формат сведений отладки) для /Z7 : совместимый с свойствами>проекта C/C++>General> Debug Information Format >C7
- /JMC Отключить (только отладка кода): свойства> проекта C/C++>, общая> поддержка только для отладки кода>
- Задайте для типа отладчика смешанный тип: Свойства отладчика>>проекта>смешанная (платформа .NET)
- /ASSEMBLYDEBUG Включение: свойства>компоновщика> отладки отладочной сборки> >(ASSE МБ LYDEBUG)
Пример: преобразование из char *
Description
В этом примере показано, как преобразовать из char * строки в типы строк, перечисленные выше. Строка char * (также известная как строка в стиле C) использует завершающий значение NULL, чтобы указать конец строки. Строки в стиле C обычно требуют 1 байта на символ, но также могут использовать 2 байта. В приведенных ниже char * примерах строки иногда называются строками многобайтовых символов из-за данных строки, которые результаты преобразования из широкой строки Юникода. Однобайтовые и многобайтовые MBCS функции могут работать со char * строками.
Сведения о выполнении и отладке этого примера см. в разделе "Запуск примеров".
Код
// convert_from_char.cpp // compile with: /clr /Zc:twoPhase- /link comsuppw.lib #include #include #include #include "atlbase.h" #include "atlstr.h" #include "comutil.h" using namespace std; using namespace System; int main() < // Create and display a C-style string, and then use it // to create different kinds of strings. const char* orig = "Hello, World!"; cout // Convert the C-style string to a CStringA and display it. CStringA cstringa(orig); cstringa += " (CStringA)"; cout ", systemstring); delete systemstring; >
Hello, World! (char *) Hello, World! (wchar_t *) Hello, World! (_bstr_t) Hello, World! (CComBSTR) Hello, World! (CStringA) Hello, World! (CStringW) Hello, World! (basic_string) Hello, World! (System::String)
Пример: преобразование из wchar_t *
Description
В этом примере показано, как преобразовать из другого wchar_t * типа строк. Несколько строковых типов, в том числе wchar_t * , реализуют широкие форматы символов. Чтобы преобразовать строку между многобайтовым и расширенным символьным форматом, можно использовать один вызов функции, например mbstowcs_s или вызов конструктора для класса, например CStringA .
Сведения о выполнении и отладке этого примера см. в разделе "Запуск примеров".
Код
// convert_from_wchar_t.cpp // compile with: /clr /Zc:twoPhase- /link comsuppw.lib #include #include #include #include "atlbase.h" #include "atlstr.h" #include "comutil.h" using namespace std; using namespace System; int main() < // Create a string of wide characters, display it, and then // use this string to create other types of strings. const wchar_t* orig = L"Hello, World!"; wcout // Convert a wide wchar_t string to a multibyte CStringA, // append the type of string to it, and display the result. CStringA cstringa(orig); cstringa += " (CStringA)"; cout ", systemstring); delete systemstring; >
Hello, World! (wchar_t *) Hello, World! (char *) Hello, World! (_bstr_t) Hello, World! (CComBSTR) Hello, World! (CStringA) Hello, World! (CStringW) Hello, World! (basic_string) Hello, World! (System::String)
Пример: преобразование из _bstr_t
Description
В этом примере показано, как преобразовать из другого _bstr_t типа строк. Объект _bstr_t инкапсулирует широкие строки символов BSTR . BSTR Строка имеет значение длины и не использует пустой символ для завершения строки, но для преобразования типа строки может потребоваться завершающий символ NULL.
Сведения о выполнении и отладке этого примера см. в разделе "Запуск примеров".
Код
// convert_from_bstr_t.cpp // compile with: /clr /Zc:twoPhase- /link comsuppw.lib #include #include #include #include "atlbase.h" #include "atlstr.h" #include "comutil.h" using namespace std; using namespace System; int main() < // Create a _bstr_t string, display the result, and indicate the // type of string that it is. _bstr_t orig("Hello, World!"); wcout // Convert a _bstr_t to a CStringA string. CStringA cstringa(orig.GetBSTR()); cstringa += " (CStringA)"; cout ", systemstring); delete systemstring; >
Hello, World! (_bstr_t) Hello, World! (char *) Hello, World! (wchar_t *) Hello, World! (CComBSTR) Hello, World! (CStringA) Hello, World! (CStringW) Hello, World! (basic_string) Hello, World! (System::String)
Пример: преобразование из CComBSTR
Description
В этом примере показано, как преобразовать из другого CComBSTR типа строк. Например _bstr_t , CComBSTR объект инкапсулирует широкие BSTR символьные строки. BSTR Строка имеет значение длины и не использует пустой символ для завершения строки, но тип строки, который вы преобразуете, может потребовать завершения null.
Сведения о выполнении и отладке этого примера см. в разделе "Запуск примеров".
Код
// convert_from_ccombstr.cpp // compile with: /clr /Zc:twoPhase- /link comsuppw.lib #include #include #include #include "atlbase.h" #include "atlstr.h" #include "comutil.h" #include "vcclr.h" using namespace std; using namespace System; using namespace System::Runtime::InteropServices; int main() < // Create and initialize a BSTR string by using a CComBSTR object. CComBSTR orig("Hello, World!"); // Convert the BSTR into a multibyte string, display the result, // and indicate the type of string that it is. CW2A printstr(orig); cout ", systemstring); delete systemstring; >
Hello, World! (CComBSTR) Hello, World! (char *) Hello, World! (wchar_t *) Hello, World! (_bstr_t) Hello, World! (CStringA) Hello, World! (CStringW) Hello, World! (basic_string) Hello, World! (System::String)
Пример: преобразование из CString
Description
В этом примере показано, как преобразовать из другого CString типа строк. CString основан на типе TCHAR данных, который, в свою очередь, зависит от того, определен ли символ _UNICODE . Если _UNICODE он не определен, TCHAR определяется char и CString содержит строку многобайтового символа; если _UNICODE она определена, TCHAR определена wchar_t и CString содержит широкую символьную строку.
CStringA содержит char тип и поддерживает однобайтовые или многобайтовые строки. CStringW — это версия широкого символа. CStringA и CStringW не используйте _UNICODE для определения того, как они должны компилироваться. CStringA и CStringW используются в этом примере для уточнения незначительных различий в выделении буфера и обработке выходных данных.
Сведения о выполнении и отладке этого примера см. в разделе "Запуск примеров".
Код
// convert_from_cstring.cpp // compile with: /clr /Zc:twoPhase- /link comsuppw.lib #include #include #include #include "atlbase.h" #include "atlstr.h" #include "comutil.h" using namespace std; using namespace System; int main() < // Set up a multibyte CStringA string. CStringA origa("Hello, World!"); cout // Convert to a wide character CComBSTR string from // a wide character CStringW string. CComBSTR ccombstrw(origw); // Append the type of string to it, and display the result. if (ccombstrw.Append(L" (CComBSTR)") == S_OK) < CW2A printstrw(ccombstrw); wcout // Convert a multibyte character CStringA to a // multibyte version of a basic_string string. string basicstring(origa); basicstring += " (basic_string)"; cout ", systemstring); delete systemstring; // Convert a wide character CStringW to a // System::String. String^ systemstringw = gcnew String(origw); systemstringw += " (System::String)"; Console::WriteLine("", systemstringw); delete systemstringw; >
Hello, World! (CStringA) Hello, World! (CStringW) Hello, World! (char *) Hello, World! (char *) Hello, World! (wchar_t *) Hello, World! (wchar_t *) Hello, World! (_bstr_t) Hello, World! (_bstr_t) Hello, World! (CComBSTR) Hello, World! (CComBSTR) Hello, World! (basic_string) Hello, World! (System::String)
Пример: преобразование из basic_string
Description
В этом примере показано, как преобразовать из другого basic_string типа строк.
Сведения о выполнении и отладке этого примера см. в разделе "Запуск примеров".
Код
// convert_from_basic_string.cpp // compile with: /clr /Zc:twoPhase- /link comsuppw.lib #include #include #include #include "atlbase.h" #include "atlstr.h" #include "comutil.h" using namespace std; using namespace System; int main() < // Set up a basic_string string. string orig("Hello, World!"); cout // Convert a basic_string string into a multibyte // CStringA string. CStringA cstring(orig.c_str()); cstring += " (CStringA)"; cout ", systemstring); delete systemstring; >
Hello, World! (basic_string) Hello, World! (char *) Hello, World! (wchar_t *) Hello, World! (_bstr_t) Hello, World! (CComBSTR) Hello, World! (CStringA) Hello, World! (CStringW) Hello, World! (System::String)
Пример: преобразование из System::String
Description
В этом примере показано, как преобразовать из широкой символьной системы::String в другие типы строк.
Сведения о выполнении и отладке этого примера см. в разделе "Запуск примеров".
Код
// convert_from_system_string.cpp // compile with: /clr /Zc:twoPhase- /link comsuppw.lib #include #include #include #include "atlbase.h" #include "atlstr.h" #include "comutil.h" #include "vcclr.h" using namespace std; using namespace System; using namespace System::Runtime::InteropServices; int main() < // Set up a System::String and display the result. String^ orig = gcnew String("Hello, World!"); Console::WriteLine("(System::String)", orig); // Obtain a pointer to the System::String in order to // first lock memory into place, so that the // Garbage Collector (GC) cannot move that object // while we call native functions. pin_ptr wch = PtrToStringChars(orig); // Make a copy of the System::String as a multibyte // char* string. Allocate two bytes in the multibyte // output string for every wide character in the input // string, including space for a terminating null. size_t origsize = wcslen(wch) + 1; const size_t newsize = origsize * 2; size_t convertedChars = 0; char* nstring = new char[newsize]; wcstombs_s(&convertedChars, nstring, newsize, wch, _TRUNCATE); cout // Convert a wide character System::String to // a multibyte CStringA string. CStringA cstring(wch); cstring += " (CStringA)"; cout
Hello, World! (System::String) Hello, World! (char *) Hello, World! (wchar_t *) Hello, World! (_bstr_t) Hello, World! (CComBSTR) Hello, World! (CStringA) Hello, World! (CStringW) Hello, World! (basic_string)
Преобразование между узкими и широкими строками
Устаревшие приложения C и Windows используют кодовые страницы, а не кодировки Юникода при обработке узких строк и широких строк.
Строки .NET являются UTF-16, но ATL CStringA является узкой строкой, и преобразование из широкого в узкий выполняется WideCharToMultiByte функцией Win32. При преобразовании стиля CHAR* C (стиль C CHAR* является .NET byte* ) в строку, которая вызывается противоположной функцией MultiByteToWideChar Win32.
Обе функции зависят от концепции Windows кодовой страницы; не концепция .NET языка и региональных параметров. Чтобы изменить системную кодовую страницу, используйте параметр региона с помощью панель управления> введите Region в поле поиска> регион (изменение даты, времени или числовых форматов)>Администратор строчного>языкового стандарта системы изменения.
В языковой версии Windows кодовая en-US страница по умолчанию — 1033. При установке другого языка Windows она будет иметь другую кодовую страницу. Его можно изменить с помощью панели управления.
Существует несоответствие в том, как CStringA выполняется широкое и узкое преобразование, и способ gcnew string(CHAR*) , который выполняет узкое к широкому преобразованию. CStringA передается CP_THREAD_ACP , что означает использование текущей кодовой страницы потока в метод сужения преобразования. Но string.ctor(sbyte*) передается CP_ACP , что означает использовать текущую системную кодовую страницу в метод расширения преобразования. Если системные и кодовые страницы потоков не совпадают, это может привести к повреждению данных кругового пути.
Чтобы примирить это различие, используйте константу _CONVERSION_DONT_USE_THREAD_LOCALE ), чтобы получить преобразование для использования CP_ACP (например, .NET) вместо CP_THREAD_ACP . Дополнительные сведения см. в разделе _CONVERSION_DONT_USE_THREAD_LOCALE .
Другой подход — использовать pinvoke для вызова GetThreadLocale . Используйте возвращаемый LCID объект для создания CultureInfo . Затем используйте CultureInfo.TextInfo для получения кодовой страницы, используемой в преобразовании.
Преобразование строк в C#

Запросы типа «How to convert string to int C Sharp» или «Конвертация the string to int в Си» формулируются разработчиками, особенно новичками, достаточно часто. Далеко не всегда удается конвертировать один тип данных в другой. Это приводит к ошибкам работы приложения.
Сегодня предстоит более подробно рассмотреть преобразование строк в целочисленные значения. Предложенная далее информация будет полезна как новичкам, так и уже опытным специалистам. Она рассчитана на тех, кто уже занимался хотя бы поверхностной разработкой на рассматриваемом языке.
Терминология
Перед тем как изучать the converting to int, необходимо запомнить несколько ключевых определений. Они относятся не только to the C#, но и к других языкам разработки:
- Переменная – именованная область памяти. Она получает определенные значения, необходимые для дальнейшей работы в приложении.
- Тип данных – классификация информации одного и того же вида. Своеобразное «пояснение» компилятору, относительно выделяемой памяти и принципов обработки переменных и функций.
- Присваивание значения – процесс размещения в памяти необходимых данных.
У the C# поддерживаются различные виды информации. В зависимости от соответствующего параметра будет меняться принцип обработки имеющихся материалов.
Типы данных
The C# – язык программирования, который поддерживает множество встроенных типов. Большая часть из них являются специализированными. Они используются для реализации определенного спектра задач. Далее предстоит познакомиться с более распространенными видами информации.
The C# поддерживает следующие «стандартные» типы данных:
- число;
- строка;
- перечисление;
- класс;
- структуры.
Особое внимание будет уделено первым двум пунктам, а также процедуре под названием converting the string to the int.
Числа
Числовые значения в разработке встречаются очень часто. Это основной вид информации, с которой предстоит иметь дело каждому программисту. Числовые типы представлены в виде:
- Bool – булево число. Может принимать только два значения – true и false. Используется в качестве «флага» и применяется в циклах и ветвлениях.
- Char – символ. Диапазон значений – U+0000-U+FFFF.
- Дробные числа – они имеют плавающую запятую. Могут быть double, decimal и float. Выбирается конкретный вид дробных чисел в зависимости от необходимого диапазона значений. Чаще всего достаточно использовать the float.
- Целочисленные значения. Данный раздел является одним из самых крупных. Он может быть: sbyte (от -128 to 127), byte (from 0 to 255), short (-32 768 to 32 767), ushort (от 0 до 65 535), int (от -2 147 483 648 до 2 147 483 647), uint (0 to 4 294 967 295), long (-9 223 372 036 854 775 808 до 9 223 372 036 854 775 807) и ulong (от 0 to 18 446 744 073 709 551 615). Наиболее распространенным вариантом является int. Это обычное целое число с достаточно широким диапазоном принимаемых значений.
В процессе конвертации информации предстоит иметь дело с типом «строка». Он тоже встречается в разработке достаточно часто.
Строки в C#
Строка – объект типа the string. Его значением будет выступать текст. Внутри приложения текстовые сведения хранятся в виде упорядоченной коллекции объектов the char только для чтения. В конце строк в the C# отсутствуют символы, завершающие значения NULL. Это значит, что the string может включать в себя бесконечное количество внедренных NULL-символов (‘\0’).
Дополнительно здесь необходимо запомнить следующее:
- Свойство Length у the string полностью соответствует количество содержащихся внутри объектов Char, а не числу символов Unicode. Для получения доступа к кодовым точкам Юникода в строке используются объекты типа StringInfo.
- Строковые объекты to the C# являются неизменными после создания. Методы и операторы языка программирования не вносит в строку изменения. Они выполняют необходимые преобразования и возвращают в виде результата новый строковый компонент.
- В The C# поддерживаются строковые литералы в кавычках. Они будут начинаться и заканчиваться символом двойных кавычек. Используются для the strings, которые помещаются в один объект и не включают в себя escape-последовательности.
- Язык разработки поддерживает буквальные строковые литералы (verbatim). Они применяются to многостроковых строк, а также с компонентами, в состав которых входят символы обратных косых черт или внедрены двойные кавычки. Verbatim сохраняют новые символы строк с составе его текста. В буквальной строке двойные кавычки используются для вставки кавычек.
Начиная с C# 11, поддерживаются необработанные строковые литералы. Они упрощают создание to the string с несколькими строчками. При помощи таких объектов удается применять в коде любые символы, которые требуют escape-последовательностей.
Преобразование string to int: особенности
Входные данные в разработке часто выступают текстовыми полями. Введенная пользователем в приложении информация – это строка. Преобразование to int может потребоваться тогда, когда текстовое поле используется для указания числовых значений в приложении.
У платформы .NET Framework для конвертации используется специальный класс – Convert. Он разработан специально для работы с преобразования собственных типов. Числовые типы данных поддерживают методы для разбора the strings.
Класс Convert
Convert – специальный класс C#, который располагается в именном пространстве System. За счет него удается обеспечить конвертацию через статистические методы. Они могут быть вызваны без предварительного создания объекта.
Пользоваться классом the Convert нелегко из-за разницы в вызове собственных типов данных C# и базовых структур .NET Framework. Ниже можно увидеть ключевые слова, используемые для описания одних и тех же видов информации:

Для статических методов преобразования используется стандартизированный синтаксис:

- Сначала пишется «команда» – Convert, после которой ставится точка.
- Далее должно быть имя метода. Оно начинается с «to».
- После «to» указывается необходимое имя типа данных .NET.
Выше можно увидеть несколько наглядных преобразований: string to int, int to decimal, string to bool.
Метод the Convert может быть использован без предварительной ссылки на именное пространство System. Связано это с тем, что Visual автоматически активирует следующую строку в верхней части файла кода:
Данный метод позволяет указать компилятору на необходимость автоматического поиска именного пространства. Без директивы using исходных код приложения будет таким:
![]()
Convert используется для преобразований между числовыми типами. Пример – перевод числа с плавающей запятой в целое. В этом случае результат будет округлен до ближайшего целочисленного. Если дробная часть – это «полпути» между двумя целыми, система вернут ближайшее четное значение.
Работа с Parse
Еще один вариант конвертации – это использование метода Parse. Он более гибкий, потому что допускает указание стиля преобразования. Пример – конвертация валютных символов или шестнадцатеричных значений.

Parse является перегруженным, поэтому его можно вызвать несколькими способами. Каждый – со своим спектром параметров. Первый вариант – это использование вызова с одним параметром the string. Он включает в себя строку для дальнейшей работы.
Второй вариант вызова – с двумя параметрами. Он поддерживает не только string, но и перечисление на допустимое количество стилей (NumberStyles). Оно определено в SystemGlobalization. Рекомендуется в начале кода добавить строку:

Выше – пример использования Parse с двумя параметрами. Значения перечисления могут объединяться при помощи оператора OR (|). Этот прием позволяет использовать несколько стилей.

Теперь понятно, как происходит конвертация строк в целочисленные значения в C#. Лучше работать с различными типами информации помогут дистанционные компьютерные курсы.