将USSD代码发送到C#中的调制解调器,并始终返回错误

将USSD代码发送到C#中的调制解调器,并始终返回错误,c#,decode,at-command,modem,ussd,C#,Decode,At Command,Modem,Ussd,我通过串口在调制解调器上发送USSD代码。但它总是给出错误的回应 我发出的命令包括: 依次: serialPort.Write("AT+CMGF=0" + "\r\n"); serialPort.Write("AT+CUSD=1,\"*135#\"" + "\r\n"); 当我在first AT命令中配置消息格式时,它会给出“OK”响应。但在发送USSD代码时,响应总是“错误”。为什么会这样 不要在命令末尾使用\n,只使用\r CUSD命令的形式是:AT+CUSD=1,“*135#”,15 在

我通过串口在调制解调器上发送USSD代码。但它总是给出错误的回应

我发出的命令包括: 依次:

serialPort.Write("AT+CMGF=0" + "\r\n");
serialPort.Write("AT+CUSD=1,\"*135#\"" + "\r\n");

当我在first AT命令中配置消息格式时,它会给出“OK”响应。但在发送USSD代码时,响应总是“错误”。为什么会这样

不要在命令末尾使用
\n
,只使用
\r

CUSD命令的形式是:
AT+CUSD=1,“*135#”,15

在C#中,它应该是:

serialPort.Write("AT+CMGF=0" + "\r");
serialPort.Write("AT+CUSD=1,\"*135#\",15" + "\r");

首先,AT命令在C#中以“\r”结尾。 您还可以检查调制解调器的TE字符集

serialPort.Write("AT+CSCS?\r");
如果字符集为“UCS2”,请使用以下对话:

serialPort.Write("AT+CUSD=1,\"" + UnicodeStr2HexStr("*135#") + "\",15" + "\r");


另请参见(转换为UCS2)

这是正确的,始终使用
\r
在命令行终止。如何再次将十六进制转换为Str
public static String UnicodeStr2HexStr(String strMessage)
{
    byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
    String strHex = BitConverter.ToString(ba);
    strHex = strHex.Replace("-", "");
    return strHex;
}