Shadowed, permalink
Sveiki, "pasigirsiu" ties kuo dabar strigau.
Taigi, per RS232 gautus duomenis iš buferio nusiskaitau ir sudedu į "sb" stringą:
byte[] buffer = new byte[serialPort1.BytesToRead];
serialPort1.Read(buffer, 0, buffer.Length);
sb = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
sb.AppendFormat("{0:X2} ", buffer[i]);
Beveik tuom šita programėlė ir baigiasi, ten dar keletas patikrinimų ir nustatymų. Kitoje programėlėje noriu apdoroti duomenis. Pirmas žingsnis – gautus HEX’us
public void Process_Data()
{
tBox_Raw_Data.Text += sb.ToString() + Environment.NewLine; // Į textboxą parašau gautą sb eilutę, formatas 01 0A 02 02 00 00 0F...), bet čia tik pasitikrinimui, vėliau ištrinsiu.
string hexValues = sb.ToString();
string[] hexValuesSplit = hexValues.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
StringBuilder char_to_string = new StringBuilder();
foreach (string hex in hexValuesSplit)
{
int value = System.Convert.ToInt32(hex, 16);
string stringValue = Char.ConvertFromUtf32(value);
char charValue = (char)value; // Čia jau turiu tai ko reikia, visi HEXai konvertuoti į atitinkamas raides, kas ne raidės atfiltruota. Raidės ne random, ten bus žodžiai. Nu pvz Test1irIeskau.
char_to_string.Append(charValue); // Toliau reikės tos eilutės žodžius susidėlioti į atitinkamas vietas. Apie tai – po programėlė.
}
}
Gavus tą “hh hh hh T e s t 1 hh hh hh i r hh hh I e s k a u “ (hh – bet kokie hexai, ne ASCII) norėsiu išmėtyti po label’us, tam reiks ieškoti eilutėje atitinakmų raidžių. Šiaip turbūt reikalinga vieta nesikeis ir visada bus tarkim nuo 4 pozicijos iki 8 žodžiui Test1, bet noriu išmokti daugiau, tai tikslas būtų ieškoti pirmų dviejų raidžių pvz Te ir radus ištraukti visą žodį. Tas žodis visada bus vienodo ilgio, tai čia truputį supaprastina, kad nereiks specialiai detektuoti žodžio galo. Tas pats ir su Ieskau – pasiusti per eilutę užklausą su Ie, kad surastų visą žodį, kurio ilgis irgi visada vienodas. Kad liktų vien raidiniai hex’ai paskui gal dar if’insiu su hexų ribinėm vetrėm. Chm.. Dabar pagalvojau, kad gal tada nebeliks tarpų ir visokių ne raidinių kripučių iš tų random HEXų ir beliks tik suskaldyti eilutę su kokiu TRIM ar panašiai. Bandau Bet visa kita išlieka...
char_to_string.Append(charValue); – čia ta paskutinė eilutė, tikėjausi, kad padės, bet kažkaip nesuveikia...
Šiam momentui – ar teisingas toks Process_Data variantas, norint gauti reikiamą rezultatą ? Jeigu teisingas – į kurią pusę toliau kapstytis? Kažkaip Googlo variantai nesuveikė, tai nepagalvokit, kad aptingau ir pirmu taikymu čia klausiu