我正在尝试阅读收到的短信。对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 :(得分:1)
此question应该会有所帮助:如果您要定位WM6,则可以使用Microsoft.WindowsMobile.PocketOutlook命名空间,也可以使用此library。
由于Convert.ToChar(字节)“成功”,可能该消息不是Unicode(UTF-16)编码。在UTF-16中,每个字符有两个字节。英文字符将被映射为'00 XX',即零字节后跟字符值。
可能使用UTF8编码。尝试其他一些编码,看看会发生什么。
答案 1 :(得分:0)
我在从Decoding中分配返回的字符串时遇到了一个愚蠢的错误。即使在这里张贴也太尴尬了。
上述代码中的代码可以正常使用。
感谢您的支持!