Skip to content

Commit a166ec0

Browse files
authored
Add files via upload
1 parent 4d14dd2 commit a166ec0

File tree

3 files changed

+457
-0
lines changed

3 files changed

+457
-0
lines changed

Unit1.cpp

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
//---------------------------------------------------------------------------
2+
3+
#include <vcl.h>
4+
#pragma hdrstop
5+
#include <stdio.h>
6+
#include <string.h>
7+
#include <iostream> // std::cout
8+
#include <sstream>
9+
10+
#include "Unit1.h"
11+
//---------------------------------------------------------------------------
12+
#pragma package(smart_init)
13+
#pragma resource "*.dfm"
14+
TForm1 *Form1;
15+
//---------------------------------------------------------------------------
16+
__fastcall TForm1::TForm1(TComponent* Owner)
17+
: TForm(Owner)
18+
{
19+
20+
}
21+
22+
// Ïðåîáðàçîâàíèå íîìåðà â íóæíûé (PDU) è îáðàòíî (òåêñòîâûé)
23+
String TForm1::workNumber(String number, String type){
24+
25+
if(type == "uncode"){
26+
27+
// Óäàëÿåì 1 ñèìâîë +
28+
number.Delete(1,1);
29+
30+
// Åñëè ÷èñëî íå÷åòíîå, äî äîáàâëÿåì F â êîíöå
31+
if(number.Length() % 2 == 1)
32+
number = number + "F";
33+
}
34+
35+
// Ìåíÿåì ÷èñëà ìåñòàìè
36+
int i = 1;
37+
char swap[1];
38+
39+
while(i < number.Length()){
40+
41+
swap[0] = number[i];
42+
number[i] = number[i+1];
43+
number[i+1] = swap[0];
44+
45+
i = i + 2;
46+
}
47+
48+
// Óäàëÿåì F, åñëè ÷èñëî íå÷åòíîå
49+
if(type == "decode")
50+
if(number[ number.Length() ] == 'F')
51+
number.Delete( number.Length() ,1);
52+
53+
// Äîáàâëÿåì + â íà÷àëî, åñëè äåêîäèðóåì
54+
if(type == "decode")
55+
number = "+" + number;
56+
57+
return number;
58+
59+
}
60+
61+
62+
//---------------------------------------------------------------------------
63+
void __fastcall TForm1::Button1Click(TObject *Sender)
64+
{
65+
String text;
66+
String textNew;
67+
String fullStr;
68+
69+
// Ïðîâåðêà íà ââîä äàííûõ
70+
if(Edit1->Text == "" || Edit1->Text.Length() < 12){
71+
Label4->Caption = "Íåâåðíûé ôîðìàò íîìåðà.";
72+
return;
73+
}
74+
75+
// Ïðîâåðêà íà ââîä òåêñòà
76+
if(Edit2->Text == "" || Edit1->Text.Length() < 1){
77+
Label5->Caption = "Íå ââåäåí òåêñò.";
78+
return;
79+
}
80+
81+
// Î÷èùàåì âñå
82+
Label4->Caption = "";
83+
Label5->Caption = "";
84+
text = "";
85+
textNew = "";
86+
fullStr = "";
87+
Memo2->Clear();
88+
String Recipient = "";
89+
90+
// Ôîðìèðóåì íîìåð
91+
String EncodeNum = workNumber(Edit1->Text, "uncode");
92+
93+
// Êîë-âî ñèìâîëîâ â íîìåðå
94+
if(EncodeNum[ EncodeNum.Length() -1 ] == 'F')
95+
Recipient = IntToHex( EncodeNum.Length()-1 , 2) + "91" + EncodeNum;
96+
else
97+
Recipient = IntToHex( EncodeNum.Length() , 2) + "91" + EncodeNum;
98+
99+
// Òåêñò ñîîáùåíèÿ
100+
text = Edit2->Text;
101+
102+
// Ìàññèâ ñ áàéòàìè ñèìâîëîâ
103+
TBytes FirstLine;
104+
FirstLine = TEncoding::Unicode->GetBytes(text);
105+
106+
// Ôîðìèðóåì ìàññèâ áàéòîâ äëÿ PDU
107+
for(int i = 0; i < FirstLine.Length; i+=2)
108+
textNew = textNew + IntToHex(FirstLine[i+1], 2) + "" + IntToHex(FirstLine[i], 2);
109+
110+
// Âûâîäèì ïîëíûé ðåçóëüòàò PDU ñòðîêè
111+
Memo2->Lines->Add("000100" + Recipient + "000812" + "" + textNew);
112+
}
113+
//---------------------------------------------------------------------------
114+
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
115+
{
116+
// Ââîä òîëüêî ÷èñåë è backspace
117+
if( Key != 8 && ( (Key < '0' || Key > '9' ) ) ) Key = NULL;
118+
else if( Key == 8 && Edit1->Text.Length() == 1 && Edit1->Text[1] == '+')
119+
Key = NULL;
120+
121+
return;
122+
}
123+
//---------------------------------------------------------------------------
124+
125+
void __fastcall TForm1::Button2Click(TObject *Sender)
126+
{
127+
// Ïîëó÷àåì ñîäåðæàíèå
128+
String pduFull = Memo1->Lines->GetText();
129+
130+
// Ïðîâåðêà íà ïóñòàòó è êîë-âî ñèìâîëîâ
131+
if(pduFull == ""){
132+
Label8->Caption = "Âû íå ââåëè PDU.";
133+
return;
134+
}
135+
else if(pduFull.Length() < 28){
136+
Label8->Caption = "Íåâåðíûé ôîðìàò PDU.";
137+
return;
138+
}
139+
140+
Label8->Caption = "";
141+
Edit3->Text = "";
142+
Edit4->Text = "";
143+
int countNum = 0;
144+
145+
// Óäàëÿåì ïåðâûå ñëóæåáíûå äàííûå
146+
pduFull.Delete(1,6);
147+
148+
// Ïåðåìåííàÿ äëÿ íîìåðà
149+
String numberMob;
150+
151+
// Ïåðåâîäèì 16 ðè÷íóþ â 10 ÷íóþ (êîë-âî ñèìâîëîâ â òåëåôîíå)
152+
AnsiString countNumber = pduFull.SubString(1,2);
153+
std::string hex;
154+
hex = countNumber.c_str();
155+
std::istringstream stream(hex);
156+
stream >> std::hex >> countNum;
157+
158+
// Óäàëÿåì èíôîðìàöèþ îá êîë-âî ñèìâîëîâ è
159+
pduFull.Delete(1,4);
160+
161+
// Åñëè
162+
if(countNum % 2 == 1)
163+
countNum = countNum + 1;
164+
165+
// Âûòàñêèâàåò íîìåð
166+
for(int i = 1; i <= countNum; i++)
167+
numberMob = numberMob + pduFull[i];
168+
169+
// Ïîëó÷àåì íîðìàëüíûé íîìåð è âñòàâëÿåì åãî
170+
Edit3->Text = workNumber(numberMob, "decode");
171+
172+
// Âûðåçàåì íîìåð è îñòàâëÿåì òîëüêî òåêñò
173+
pduFull.Delete(1,6+countNum);
174+
175+
// Ñòðîêà äëÿ ïåðåäåëûâàåíèÿ â ñèìâîë
176+
String textConv;
177+
178+
// Ïåðåáèðàåì êîäû ñèìâîëîâ â ñàìè ñèìâîëû
179+
for(int i = 1; i <= pduFull.Length()-2; i+=4){
180+
textConv = (String)"0x" + (String)pduFull[i] + (String)pduFull[i+1] + (String)pduFull[i+2] + (String)pduFull[i+3];
181+
Edit4->Text = Edit4->Text + wchar_t( StrToInt(textConv) );
182+
}
183+
184+
}
185+
//---------------------------------------------------------------------------
186+
187+
void __fastcall TForm1::Edit1Change(TObject *Sender)
188+
{
189+
// Âñòàâëÿåì + â íà÷àëî (åñëè óäàëåíî)
190+
if(Edit1->Text.Length() == 0)
191+
Edit1->Text = '+';
192+
else if(Edit1->Text.Length() > 1 && Edit1->Text[1] != '+'){
193+
194+
String textNumCheck = Edit1->Text;
195+
196+
for(int i = 1; i <= textNumCheck.Length(); i++){
197+
198+
if(textNumCheck[i] == '+'){
199+
textNumCheck.Delete(i,1);
200+
break;
201+
}
202+
}
203+
204+
Edit1->Text = "+" + textNumCheck;
205+
}
206+
207+
208+
}
209+
//---------------------------------------------------------------------------
210+
211+
212+

0 commit comments

Comments
 (0)