J'essaie de lire un message SMS que je reçois. L'appel à SmsReadMessage
se termine avec succès et je reçois le message dans un tableau d'octets. Voici la déclaration de SmsReadMessage
:
SmsReadMessage et la conversion du tampon en chaîne
[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);
Maintenant, je voudrais convertir le tableau d'octets à une chaîne.
Ce qui suit n'a pas fonctionné pour moi (renvoie la valeur null):
Encoding.Unicode.GetString(pMessage, 0, Size);
Comment convertir le tableau d'octets à chaîne?
Est-ce que je devrais changer la déclaration à quelque chose d'autre qui sera converti plus facilement? C'est le function's signature.
Mise à jour: qui suit réussit:
string test = "";
foreach (byte b in pMessage)
{
if (b != 0)
{
test += Convert.ToChar(b);
}
}
Le paramètre dwSize pour le message texte est 320 (le message envoyé à l'origine est inférieur à 160 caractères).
Cela peut être dû à un rapport incorrect par le pilote RIL sous-jacent. Cela pourrait également être la source de mon problème de conversion d'origine.
Je ne suis pas sûr qu'il y ait un caractère de fin à la fin.
Comment puis-je confirmer cela?
Etes-vous sûr que le problème est avec la conversion et non la lecture? Est-ce que pBuffer et dwBufferSize ont des valeurs attendues après avoir appelé la fonction? – kgiannakakis
J'ai mis à jour la question avec les informations requises. Merci! – Shaihi
Si une traduction par octet fonctionne, utilisez Encoding.ASCII. Comme pour un terminateur, regardez simplement les données d'octets dans le tableau et voyez s'il y en a une. – ctacke