SmsReadMessage和缓冲区转换为字符串

时间:2009-11-30 09:28:29

标签: compact-framework windows-ce

我正在尝试阅读收到的短信。对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);

现在我想将字节数组转换为字符串。
以下内容对我不起作用(返回null):

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

如何将字节数组转换为字符串?
我是否应该将声明更改为更容易转换的其他内容?这是function's signature


更新: 以下成功:

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

文本消息的dwSize参数为320(最初发送的消息少于160个字符)。
这可能是由于底层RIL驱动程序报告不正确引起的。这也可能是我原始转换问题的根源。
我不确定最后会有一个终结字符。
我该如何确认?

2 个答案:

答案 0 :(得分:1)

question应该会有所帮助:如果您要定位WM6,则可以使用Microsoft.WindowsMo​​bile.PocketOutlook命名空间,也可以使用此library

由于Convert.ToChar(字节)“成功”,可能该消息不是Unicode(UTF-16)编码。在UTF-16中,每个字符有两个字节。英文字符将被映射为'00 XX',即零字节后跟字符值。

可能使用UTF8编码。尝试其他一些编码,看看会发生什么。

答案 1 :(得分:0)

我在从Decoding中分配返回的字符串时遇到了一个愚蠢的错误。即使在这里张贴也太尴尬了。
上述代码中的代码可以正常使用。
感谢您的支持!

相关问题