Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送Unicode文本消息SMS/Arduino_C#_C++_Arduino_Sms_Gsm - Fatal编程技术网

C# 发送Unicode文本消息SMS/Arduino

C# 发送Unicode文本消息SMS/Arduino,c#,c++,arduino,sms,gsm,C#,C++,Arduino,Sms,Gsm,我什么都试过了,在这个过程中我已经筋疲力尽了。 我可以发送正常的短信没有问题 我正在设置消息发送时需要设置的所有内容 if (! sendCheckReply(F("AT+CMGF=1"), ok_reply)) return false; if (! sendCheckReply(F("AT+CSCS=\"UCS2\""), ok_reply)) return false; if (! sendCheckReply(F("AT+CSMP=17,168,0,8"), ok_reply)) ret

我什么都试过了,在这个过程中我已经筋疲力尽了。 我可以发送正常的短信没有问题

我正在设置消息发送时需要设置的所有内容

if (! sendCheckReply(F("AT+CMGF=1"), ok_reply)) return false;
if (! sendCheckReply(F("AT+CSCS=\"UCS2\""), ok_reply)) return false;
if (! sendCheckReply(F("AT+CSMP=17,168,0,8"), ok_reply)) return false;
我正确地编码了我的Unicode字符,但是我的fona是这样的:

+ Response: +OK SEND NUMBER
+ Response:
+ Sending: 6616634660
+ Response: +OK SEND MESSAGE
+ Response:
+ Sending: 005B004E00450058002000560041004C00450054005D00200053004D005300200073006500720076006500720020006900730020006E006F0077002000720075006E006E0069006E0067002E
+ Response: AT+CMGF=1
+ Response: OK
+ Response: AT+CSCS="UCS2"
+ Response: OK
+ Response:
+ Response: AT+CSMP=17,168,0,8
+ Response: OK
+ Response: AT+CMGS="6616634660"
+ Response:
+ Response: ERROR
+ Response: -ERROR Failed sending message
+ Response: +OK READY FOR NEXT COMMAND
+ Response:
一旦AT+CMGS被发送,它就会出错。 即使我以UCS2十六进制格式提供电话号码,它也会做同样的事情

我假设格式/编码不符合预期

这是Unicode编码(从另一个Stackoverflow post解决方案中提取)

当我取出所有unicode内容时,将CSMP设置回17167,0,0

短信工作(仅限文本)


我猜CSMP的设置是不正确的,但我只是在黑暗中扔扳手在这一点上。。。有人能帮忙吗?

您的代码是直接与GSM设备通信,还是Arduino正在这样做?在后一种情况下,Atmega/Arduino上的软件是否能够处理Unicode字符串,而不限于(以零结尾的)单字节字符串?此外,问题中的代码示例缺少关键代码段,在该代码段中,您实际将AT+CMGS命令(包括任何Unicode转换…)C#代码通过其fona软件传输给Arduino;Arduino屏蔽上的软件完全支持UCS2。询问“AT+CSCS”可以确认后者。因此,对“AT+CSCS”命令的响应不是来自实际的GSM设备,而是来自Arduino?有两个软件。。。。C#系统将消息排队并发送到Arduino运行的fona。。。以及fona软件,该软件直接与GSM设备通信。所有AT+。。。命令是直接发送到GSM设备的问题(来自fona/arduino),用于更直接地回答您的问题。。。。每个AT响应都直接来自GSM调制解调器。
  Public Function UnicodeStr2HexStr(strMessage As [String]) As [String]
        Dim ba As Byte() = Encoding.BigEndianUnicode.GetBytes(strMessage)
        Dim strHex As [String] = BitConverter.ToString(ba)
        strHex = strHex.Replace("-", "")
        Return strHex
    End Function

    Public Function HexStr2UnicodeStr(strHex As [String]) As [String]
        Dim ba As Byte() = HexStr2HexBytes(strHex)
        Return HexBytes2UnicodeStr(ba)
    End Function

    '================> Used to decoding GSM UCS2 message  
    Public Function HexBytes2UnicodeStr(ba As Byte()) As [String]
        Dim strMessage = Encoding.BigEndianUnicode.GetString(ba, 0, ba.Length)
        Return strMessage
    End Function

    Public Function HexStr2HexBytes(strHex As [String]) As Byte()
        strHex = strHex.Replace(" ", "")
        Dim nNumberChars As Integer = strHex.Length / 2
        Dim aBytes As Byte() = New Byte(nNumberChars - 1) {}
        Using sr = New StringReader(strHex)
            For i As Integer = 0 To nNumberChars - 1
                aBytes(i) = Convert.ToByte(New [String](New Char(1) {Chr(sr.Read()), Chr(sr.Read())}), 16)
            Next
        End Using
        Return aBytes
    End Function