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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертирование строки в Unicode к ASCII 
:(
    Опции темы
alpha1
Дата 8.7.2009, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.5.2009
Где: Kazakhstan, Astan a

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



Помогите, пожалуйста!!!
Есть dll, созданная с помощью Borland C++ Builder 6. В C# коде вызывается функция (из dll) 
char * DeCrypt(char *str), в нее передается аргумент строка. В C# char-ы в Unicode, а в C++ - в ASCII.
Как сконвертить Unicode в ASCII?  
PM MAIL   Вверх
Partizan
Дата 8.7.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



alpha1, 

Код

         // Create two different encodings.
         Encoding ascii = Encoding.ASCII;
         Encoding unicode = Encoding.Unicode;

         // Convert the string into a byte[].
         byte[] unicodeBytes = unicode.GetBytes(unicodeString);

         // Perform the conversion from one encoding to the other.
         byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
alpha1
Дата 8.7.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.5.2009
Где: Kazakhstan, Astan a

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



Partizan, я так пробовал
компилятор пишет ошибку, что внешний компонент создал исключение. Для полной картины приведу код:

Код

using System;
using System.Text;
using System.Runtime.InteropServices;


public partial class _Default: System.Web.UI.Page
{
     [DllImport("Project2.dll")]
     unsafe public static extern char DeCrypt(char *str);


     protected void Page_Load(object sender, EventArgs e)
     {
       
     }
      protected void Button1_Click(object sender, EventArgs e)  
      {
       ASCIIEncoding encoding = new ASCIIEncoding();
       string com="hgsdchkjsdhf";
       byte[] ba = encoding.GetBytes(com);
       unsafe
        {
         fixed(char *str = ba)  //Вот тут вылетает ошибка: "Не удается неявно преобразовать тип "byte*"  в  "char*""  
         Response.Write(DeCrypt(str));
         }
     }
}



PM MAIL   Вверх
Partizan
Дата 8.7.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



alpha1, я сомневаюсь, что в массиве ba лежит именно null-terminated строка. а во-вторых 

Код

using System;
using System.Text;
using System.Runtime.InteropServices;
public partial class _Default: System.Web.UI.Page
{
     [DllImport("Project2.dll")]
     unsafe public static extern char DeCrypt(char *str);
     protected void Page_Load(object sender, EventArgs e)
     {
       
     }
      protected void Button1_Click(object sender, EventArgs e)  
      {
         // Create two different encodings.
         Encoding ascii = Encoding.ASCII;
         Encoding unicode = Encoding.Unicode;
         // Convert the string into a byte[].
         byte[] unicodeBytes = unicode.GetBytes(unicodeString);
         // Perform the conversion from one encoding to the other.
         byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
         char[] charArray = ascii.GetString(asciiBytes).ToCharArray();
       unsafe
        {
         fixed(char *str = charArray)  //Вот тут вылетает ошибка: "Не удается неявно преобразовать тип "byte*"  в  "char*""  
         Response.Write(DeCrypt(str));
         }
     }
}


опять повторюсь, что в charArray наверняка лежит НЕ null-terminated срока, как того требует C/C++


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
PashaPash
Дата 8.7.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

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



alpha1, [пальцем в небо]
Код

     [DllImport("Project2.dll", CharSet=CharSet.Ansi)]
     public static extern String DeCrypt(String str);



--------------------
PM MAIL WWW   Вверх
alpha1
Дата 13.7.2009, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.5.2009
Где: Kazakhstan, Astan a

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



Partizan, большое спасибо за совет. Функция принимает входное значение, но теперь
проблема с тем как получить значение, которое возвращает функция (из dll) 
char * DeCrypt(char *str). Там тоже указатель
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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