2009-11-30 98 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

相關問題