SmsReadMessage и преобразование буфера в строку - PullRequest
1 голос
/ 30 ноября 2009

Я пытаюсь прочитать полученное SMS-сообщение. Вызов SmsReadMessage успешно завершен, и я получаю сообщение в байтовом массиве. Вот декларация для SmsReadMessage:

    [DllImport("sms.dll", SetLastError=true)]
    public static extern int SmsReadMessage(
        IntPtr smshHandle,
        byte[] psmsaSMSCAddress,
        byte[] psmsaSourceAddress,
        byte[] pstReceiveTime,
        byte[] pbBuffer,
        int dwBufferSize,
        byte[] pbProviderSpecificBuffer,
        int dwProviderSpecificDataBuffer,
        ref int pdwBytesRead);

Теперь я хотел бы преобразовать байтовый массив в строку.
У меня не работает следующее (возвращает ноль):

Encoding.Unicode.GetString(pMessage, 0, Size);

Как преобразовать массив байтов в строку?
Должен ли я изменить объявление на что-то еще, что будет преобразовано легче? Это подпись функции .


Обновление: Следующие успехи:

string test = "";
foreach (byte b in pMessage)
{
    if (b != 0)
    {
        test += Convert.ToChar(b);
    }
}

Параметр dwSize для текстового сообщения - 320 (первоначально отправленное сообщение содержит менее 160 символов).
Это может быть вызвано из-за неправильной отчетности базового драйвера RIL. Это также может быть источником моей первоначальной проблемы с конверсией.
Я не уверен, что в конце есть завершающий символ.
Как я могу это подтвердить?

Ответы [ 2 ]

1 голос
/ 30 ноября 2009

Этот вопрос должен быть полезен: вы можете использовать пространство имен Microsoft.WindowsMobile.PocketOutlook, если вы нацеливаетесь на WM6, или вы можете использовать эту библиотеку .

Поскольку Convert.ToChar (Byte) "успешно", возможно, сообщение не закодировано в Unicode (UTF-16). В UTF-16 у вас есть два байта на символ. Английские символы будут отображаться как '00 XX ', то есть нулевой байт, за которым следует значение символа.

Возможно, используется кодировка UTF8. Попробуйте другие кодировки, чтобы посмотреть, что произойдет.

0 голосов
/ 30 ноября 2009

У меня была глупая ошибка в назначении возвращенной строки из декодирования. Это слишком неловко, чтобы даже опубликовать это здесь.
Приведенный выше код в вопросе работает правильно.
Спасибо за поддержку!

...