2009-11-30 91 views
1

我正尝试读取我收到的SMS消息。对SmsReadMessage的调用成功完成,我得到一个字节数组中的消息。下面是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驱动程序报告错误导致的。这也可能是我原来的转换问题的根源。
我不确定最后是否有终止字符。
我该如何确认?

+0

您确定问题出在转换而不是读数?调用该函数后,pBuffer和dwBufferSize是否具有期望值? – kgiannakakis 2009-11-30 11:00:53

+0

我用所需的信息更新了问题。谢谢! – Shaihi 2009-11-30 11:35:08

+0

如果按字节进行翻译,则使用Encoding.ASCII。至于终结者,只要看看数组中的字节数据,看看有没有。 – ctacke 2009-11-30 13:55:31

回答

0

我在分配解码返回的字符串时犯了一个愚蠢的错误。它甚至在这里发布它太尴尬了。
问题中的上述代码正常工作。
感谢您的支持!

1

这个question应该是有帮助的:如果你的目标是WM6,你可以使用Microsoft.WindowsMo​​bile.PocketOutlook命名空间,或者你可以使用这个library

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

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

+0

我删除了windows-mobile标签。它在那里,因为我认为也许有人用手机做了它。您提供的两个链接都是特定于WinMo的。 无论如何感谢您的答案。 – Shaihi 2009-11-30 09:53:14

+0

编码是Unicode。我有一个(非常)愚蠢的错误,这就是为什么我认为我的解码结果为空。非常感谢你的帮助。 – Shaihi 2009-11-30 14:06:42