سلام به همه برنامه نویسان
کسی از دوستان ابزاری برای تبدیل متن فارسی به PDU داره؟
سلام به همه برنامه نویسان
کسی از دوستان ابزاری برای تبدیل متن فارسی به PDU داره؟
دوست عزیز
مشغول نوشتن کدی هستم که با vb6 تبدیل متن به PDU را انجام می دهد
آیا با زبان vb6 آشنا هستید؟
و می توانید مرا در این خصوص یاری دهید؟
خیییییلییییی ممممنووووووون.........
من به وی بی مسلط هستم شما تا کجا جلو رفتی و میخای چکار کنی
Farshad Nooranian
این تابع قبلا نوشته شده
Private Function GetPDU(ByVal ServiceCenterNumber As String, _
ByVal DestNumber As String, _
ByVal DataCodingScheme As ENUM_TP_DCS, _
ByVal ValidPeriod As ENUM_TP_VALID_PERIOD, _
ByVal MsgReference As Integer, _
ByVal StatusReport As Boolean, _
ByVal UserData As String) As String()
'Check for SMS type
Dim Type As Integer '0 for SMS;1 For ConcatenatedShortMessage
Dim Result() As String
SMSObject = New SMS1.Encoder.SMS1
Select Case DataCodingScheme
Case ENUM_TP_DCS.DefaultAlphabet
If txtUserData.TextLength > 160 Then
SMSObject = New SMS1.Encoder.ConcatenatedShortMessage
Type = 1
End If
Case ENUM_TP_DCS.UCS2
If txtUserData.TextLength > 70 Then
SMSObject = New SMS1.Encoder.ConcatenatedShortMessage
Type = 1
End If
End Select
With SMSObject
.ServiceCenterNumber = ServiceCenterNumber
If StatusReport = True Then
.TP_Status_Report_Request = SMS.SMS1.Encoder.SMS1.ENUM_TP_SRI.Request_SMS_Repo rt
Else
.TP_Status_Report_Request = SMS.SMS1.Encoder.SMS1.ENUM_TP_SRI.No_SMS_Report
End If
.TP_Destination_Address = DestNumber
.TP_Data_Coding_Scheme = DataCodingScheme
.TP_Message_Reference = CInt(0) 'message refrence
.TP_Validity_Period = ValidPeriod
.TP_User_Data = UserData
End With
If Type = 0 Then
ReDim Result(0)
Result(0) = SMSObject.GetSMSPDUCode
Else
Result = SMSObject.GetEMSPDUCode 'Note here must use GetEMSPDUCode to get right PDU codes
End If
Return Result
End Function
Farshad Nooranian
من کد شما را اصلاح کردم
Option Explicit
Dim i As Integer
'
Dim BinArray(1 To 166) As String * 8
Dim BIN_PDU_ARRAY(166) As String * 8
Dim PDUMessage As String
Private Sub Command1_Click()
'PDU Mode
BinConverter
ShiftBinary
HexConverter
txtMobil.Text = ""
txtMobil.Text = PDUMessage
End Sub
Sub BinConverter()
Dim StrTemp As String
List1.Clear
For i = 1 To Len(txtmessage)
StrTemp = Get_Binary(Asc(Mid(txtmessage, i, 1)))
BinArray(i) = Right(StrTemp, 7)
List1.AddItem BinArray(i)
Next i
Label2.Caption = List1.ListCount
End Sub
Sub ShiftBinary()
Dim temp1 As String * 7, temp2 As String * 7
Dim BinChr As String * 8
Dim Ipos, Pl As Integer
Ipos = 1
Pl = 1
List2.Clear
For i = 1 To Len(txtmessage) - 1
If Ipos = 8 Then Ipos = 1
If Pl Mod 8 = 0 Then Pl = Pl + 1
temp1 = Trim(BinArray(Pl))
If i < Len(txtmessage) - 1 Then
temp2 = Trim(BinArray(Pl + 1))
BinChr = Right(Trim(temp2), Ipos) & Trim(temp1)
BIN_PDU_ARRAY(Pl) = BinChr
List2.AddItem BIN_PDU_ARRAY(Pl)
Pl = Pl + 1
Ipos = Ipos + 1
Else
Ipos = Ipos - 1
BinChr = Trim(Left(Trim(BinArray(Len(txtmessage))), 7 - Ipos))
If Len(Trim(BinChr)) < 8 Then
BinChr = String(8 - Len(Trim(BinChr)), "0") & BinChr
End If
BIN_PDU_ARRAY(Pl) = BinChr
List2.AddItem BIN_PDU_ARRAY(Pl)
End If
Next
Label3.Caption = List2.ListCount
End Sub
Sub HexConverter()
Dim Cnt As Integer
Dim L, R As String
PDUMessage = ""
For Cnt = 1 To Len(txtmessage)
L = BinToHex(Left(Trim(BIN_PDU_ARRAY(Cnt)), 4))
R = BinToHex(Right(Trim(BIN_PDU_ARRAY(Cnt)), 4))
PDUMessage = PDUMessage & L & R
Next
End Sub
Function BinToHex(exp As String) As String
Select Case exp
Case "0001": BinToHex = Hex(1)
Case "0010": BinToHex = Hex(2)
Case "0011": BinToHex = Hex(3)
Case "0100": BinToHex = Hex(4)
Case "0101": BinToHex = Hex(5)
Case "0110": BinToHex = Hex(6)
Case "0111": BinToHex = Hex(7)
Case "1000": BinToHex = Hex(8)
Case "1001": BinToHex = Hex(9)
Case "1010": BinToHex = Hex(10)
Case "1011": BinToHex = Hex(11)
Case "1100": BinToHex = Hex(12)
Case "1101": BinToHex = Hex(13)
Case "1110": BinToHex = Hex(14)
Case "1111": BinToHex = Hex(15)
Case Else: BinToHex = Hex(0)
End Select
End Function
Private Sub Form_Load()
txtmessage.Text = "سلام و خسته نباشید."
End Sub
Farshad Nooranian
دوست عزیز ممنون
اون تابع رو قبلا دیده بودم ولی همونطور که میدونید امکان استفاده از اون کلاس خاص در vb6 وجود ندارد و حتما باید در net. از اون استفاده کرد
کد جدید رو تست می کنم و بهتون اطلاع می دهم.
دوست عزیز سلام
همانطور که می دانید برای تبدیل متن به pdu به ازای هر 7 بایت یک بایت خالی باید رد شود و در نظر گرفته نشود ولی با کد بالا و در قسمت case else ، آن خظ خالی با 00 جایگزین می شود
که نتیجه صحیح نخواهد بود.
نظر شما چیست؟
UDP چند حالت داره
7Bit - 8bit - 16 bit cus2
شما برای ارسال متنهای انگلیسی باید از 7 بیت استفاده کنین ولی برای ارسال متن فارسی از 16 بیت استفاده میشه
اگه متن شما از 166 کارکتر کمتره میتونین 8بیت ارسال کنی که در این صورت نیازی به شیفت بیتها نداری
Farshad Nooranian
میشه لطفا برای پیغام "سلام" روش 16 بیت رو مثال بزنید
البته متن کامل با SMSC و شماره مقصد و ....
البته برای متن فارسی از 70 کاراکتر بیشتر مجاز نیست درسته؟
من گیج شدم
ممنون
دوست عزیز
برای ارسال متن فارسی شما باید از یونیکد فارسی استفاده کنید
که هر حرف از دو بایت استفاده میشه مثلا کارکتر
1 =0031
2=0032
برای همین بیشتر از 70 کارکتر نمیشه در یک قسمت ارسال کرد و اگه بیشتر بشه باید چند قسمتی ارسال بشه
Farshad Nooranian
ماژولی برای تبدیل وجود نداره
vb6
فعلا با Select case نوشتم ولی خیلی جالب نیست
مسئله بعدی اینکه اگه بخواهیم با PDU متن انگلیسی و فارسی رو با هم بفرسیم چطور؟ بازم 70 کاراکتر
بله حتی یک کلمه فارسی هم باعث میشه شما 16 بیتی دیتاهاتونو کد کنی
Farshad Nooranian
پس ماژول بهینه تری برای تبدیل غیر Select Case وجود نداره؟
شما به زیر برنامه ای زیر توجه کن
Private Function EncodeUserData(ByVal strUserData As String) As String
Dim res As String, res2 As String, encSMS As String, lenEmNr As Long, lenSMS As Long
Dim encRecNr As String, intNrPrefix As String
Dim i As Long
lenSMS = Len(strUserData)
'Convert to 7-bit bitstream, reverse bits
For i = 0 To Len(strUserData) - 1
res = res + StrReverse(Bin(CLng(Asc(Mid$(strUserData, i + 1, 1))), 7))
Next i
'Check whether the string length can be divided by 8 without fractions.
i = Len(res) And 7
If i <> 0 Then
res = res & String(8 - i, "0")
End If
For i = 0 To Len(res) - 1 Step 8
res2 = StrReverse(Mid$(res, i + 1, 8))
encSMS = encSMS & Hex(BinToDec(Left$(res2, 4))) & Hex(BinToDec(Right$(res2, 4)))
Next i
encSMS = Right$("00" & Hex(lenSMS), 2) & encSMS
EncodeUserData = encSMS
End Function
Farshad Nooranian
این همه طریقه کار
0 6 5 4 3 2 1 0 1 0 6 5 4 3 2 1 2 1 0 6 5 4 3 2 3 2 1 0 6 5 4 3 4 3 2 1 0 6 5 4 5 4 3 2 1 0 6 5 6 5 4 3 2 1 0 6 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0 6 5 4 3 2 1 0
Farshad Nooranian
با تشکر از شما دوست عزیز
برای دریافت چه پیشنهادی دارید؟
چگونه می توان فهمید، sms دریافتی با چه مدیست؟
از TP-DCS میتونی متوجه بشی
Farshad Nooranian
سلام ممکنه یه تابه بگید در delphi که متن رو تبدیل به pdu کنه و برعکس؟