Неуправляемая зашифрованная строка C ++ в C # byte [] - PullRequest
2 голосов
/ 11 октября 2008

У меня есть неуправляемая библиотека Cll, которую я вызываю из библиотеки классов C #, которая шифрует строковое значение в зашифрованную строку, содержащую не-ascii символы. Мне нужно взять данные и записать их двоичные значения в файл, но C # обрабатывает текст как string, а не byte[].

Зашифрованное значение обычно содержит специальные символы (\r, \O и т. Д.). Когда я делаю это, преобразовывая возвращаемую строку в C # с использованием некоторого типа кодового набора (ascii, utf-7, utf-16), он записывает значения специальных символов как интерпретированные значения Windows вместо их фактического двоичного представления.

У меня вопрос, как я могу вытянуть данные из неуправляемой DLL в byte[], а не в строку, чтобы я мог записать это в файл, используя BinaryWriter?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 октября 2008

Вы пытались использовать класс ASCIIEncoding? Он должен превратить любые символы UTF-8 в символы ascii для '?'

Страница MSDN

Использование

ASCIIEncoding ascii = new ASCIIEncoding();
Byte[] encodedBytes = ascii.GetBytes(unicodeString);
2 голосов
/ 11 октября 2008

Если я вас правильно понимаю, я думаю, вы хотите Encoding.GetBytes (), вероятно, с UTF8?

0 голосов
/ 11 октября 2008

Вы используете P / Invoke? Хм ... Возможно, указание [MarshalAs (UnmanagedType. *)] Поможет. Кроме того, вы можете создать промежуточную функцию C, которая вместо этого предоставляет зашифрованные данные как (void *). Это должно быть легче попасть в байт [].

...