Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование типов. String в char* и т.п. 
:(
    Опции темы
Mastkir
Дата 25.10.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 11.5.2006

Репутация: нет
Всего: нет



Доброго дня!

1) Есть переменная System::String^.
    Как ее преобразовать в char* (Пишу на С++ .Net, но использую библиотеку, написанную на VС++, без .Net)
     smile 

2) Есть переменная типа int. Как ее преобразовать в System::String^, но таким образом, чтобы в 
    System::String^ содержалось это-же число, но в 16-ричной системе (т.е.) 10 - это A, 11 - B, 255 - FF.
    Ну и обратное преобразование мне тоже нужно (т.е. из System::String^, содержащей число в 16-ричной системе, получить int с 10-системе исчесления). smile 

   Спасибо! smile 

PM MAIL   Вверх
mr.DUDA
Дата 25.10.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



1) метод ToCharArray поможет

2) пример на шарпе:
Код
using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        int num = 0x1abc;
        string str = num.ToString("x");
        num = int.Parse(str, NumberStyles.HexNumber);
    }
}


З.Ы. у C++/CLI очень уж зубодробительный синтаксис, ниасилил, звиняйте smile


--------------------
user posted image
PM MAIL WWW   Вверх
Mastkir
Дата 25.10.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 11.5.2006

Репутация: нет
Всего: нет




ToCharArray позволяет получить array<Char>^.
Но как мне это в char* перевести - я чего-то не понимаю smile 
PM MAIL   Вверх
mr.DUDA
Дата 25.10.2006, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Попытка №2 smile

Простое решение выглядит так:

Код
    System::String^ str = "ABC";
    
    char *buf = new char[10];
    System::IntPtr ptr(buf);

    System::Runtime::InteropServices::Marshal::Copy(str->ToCharArray(), 0, ptr, 3);


Но строки в .NET в юникоде, поэтому буфер будет содержать 3 двухбайтовых значения (три слова), с кодами символов A, B и C. Это нам не подходит ? Нужны именно "обычные" char-ы, которые по байту каждый ? Тогда действуем так:

Код
    System::String^ str = "ABC";
    
    char *buf = new char[str->Length + 1];

    cli::array<unsigned char>^ arr =
        System::Text::Encoding::ASCII->GetBytes(str);
    System::IntPtr intPtr(buf);
    System::Runtime::InteropServices::Marshal::Copy(arr, 0, intPtr, arr->Length);
    
    buf[arr->Length] = 0;



--------------------
user posted image
PM MAIL WWW   Вверх
Mastkir
Дата 26.10.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 11.5.2006

Репутация: нет
Всего: нет




Спасибо за столь подробные ответы.  smile  Очень пригодились.

Скажи еще пожалуйста, как char* преобразовать в String^ ? (ну тоесть, обратно)

Пробовал использовать Encoding::ASCII->GetString(), но туда на вход нужно cli::array<unsigned char,1> ^bytes.
Не понимаю, как мне это из char* сделать. smile 

PM MAIL   Вверх
mr.DUDA
Дата 26.10.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Mastkir @  26.10.2006,  12:21 Найти цитируемый пост)
Не понимаю, как мне это из char* сделать.

Так же как из cli::array делается char*, то есть создаём cli::array-массив на столько элементов, сколько символов в строке (можно strlen-ом узнать), и копируем с пом. Marshal::Copy в cli::array, потом дёргаем GetString.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0907 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.