Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[BCB] char en array enz*

Pagina: 1
Acties:
  • 105 views sinds 30-01-2008

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
hallo,
Ik ben weer tegen een probleem opgelopen.
Het gaat zich nu namelijk om de beruchte com-poort aansturen!:P
ik heb de compoort al compleet werkend, alleen zit ik met het probleem dat het programma een bepaalde code in de vorm van bijvoorbeeld #001255128255002 moet versturen via de compoort
Dit zal dan betekenen 001 voor adres, 255 eerste waarde, 128 tweede waarde, 255 derde waarde en 002 vierde waarde. Elke waarde wordt uit een variabele gehaald zoals bijvoorbeeld #adres,kleur1,kleur2,kleur3,tijd.
Nu moet ik die waarden dus eigenlijk allemaal achterelkaar plakken als een ansistring en die hierna aanbieden aan de compoort.
Hij kan array verzenden en char. Nu lijkt me een array het makkelijkste om te verzenden, de functie hiervan ziet er als volgt uit:
code:
1
2
3
4
5
6
7
void Tserial::sendArray(char *buffer, int len)
{
    unsigned long result;

    if (serial_handle!=INVALID_HANDLE_VALUE)
        WriteFile(serial_handle, buffer, len, &result, NULL);
}

waarbij ik hem moet aanroepen door bijvoorbeeld:
com->sendArray("Hello World !",11);
NU vraag ik mij af of ik ipv hello world hier ook een variabele kan plaatsen en wat voor type deze moet zijn.
denk redelijk makkelijk op te lossen, maar ik zou niet weten waarop ik hier moet zoeken.

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • Xyzar_
  • Registratie: September 2007
  • Laatst online: 01-09-2014
sprintf

zie dat de waarden die je wilt versturen allemaal integers van onder de 256 zijn, dus die zou je ook gewoon als bytes kunnen evrsturen. scheelt onnodig verkeer :) als je het perse printbaar wilt hebben kun je dat altijd nog fixen aan de ontvangende kant :)

[ Voor 41% gewijzigd door Xyzar_ op 29-11-2007 17:32 ]


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
maar als ik dan op de plaats van de compoort eent int plaats ipv aan char, dat gaat met compiler zeiken dat hij een int krijgt. hoe fix ik dat? een functie als IntToChar bestaat niet toch>

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Ik heb even het volgende gemaakt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void aansturen (void)
  {

        int c;
        int i;
        TEdit *Edit1;
        Tserial *com;
        com = new Tserial();
        //Setup
        com->connect("COM1", 4800, spNONE);
        //Sending
            c = StrToInt(Edit1->Text);
            com->sendChar((char)c);
        // ------------------
        com->disconnect();

        // ------------------
        delete com;
        com = 0;
  }

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 aansturen();
}

Alleen geeft hij nu een zware convert error, iemand aan idee?

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat is een "zware convert error"?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Project Project1.exe raised exception class EConvertError with message "'is nota valid integer value'. Process stopped. Use Step or Run to continue.
met een rood kruis erbij :P

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
eigenlijk komt het er gewoon op neer hoe ik van een int een of een string een char maak en of dit uberhaupt met een functie moet.

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 29-11 23:35

Creepy

Tactical Espionage Splatterer

Zo te zien gebruik je Borland C++ builder. Kijk in de Help eens bij String en dan valt je als het goed is op dat er een methode is om van je String direct een *char te krijgen.

Edit: en als je een toevoeging hebt dan vinden we het hier fijner dat je even de edit knop gebruikt i.p.v. direct onder je eigen post nog een post te plaatsen :)

[ Voor 31% gewijzigd door Creepy op 29-11-2007 19:03 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
ik kom er nog niet bepaald uit, kan de functie nog niet vinden. Ik ben ook totaal nog niet bekend in de wereld van char en array`s..... helaas.
dan eerst nog een andere vraag, hoe plak ik string aan elkaar???
dus niet 255+255 = 510 maar 255255?

Grtz

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
strings worden (behalve in visual basic <=6) normaal toch niet bij elkaar opgeteld:

dus pseudo voorbeeld code
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
int getal1 = "255";
int getal2 = "123";
string string1 = getal1;
string string2 = getal2;
string eindstring = string1 + string2;

//(wat misschien ook werkt, maar weet niet precies welke taal je gebruikt)
string eindstring = (string)getal1 + (string)getal2;
//hiermee converteer je eerst int naar string dus eigenlijk gebeurt het zelfde als in de andere code
//en ik snap eigenlijk niet waarom een chararray niet lukt?
string[] chararray;
chararray = new string[6];
chararray[0] = getal1.ToString(); //maar dan het C equalivent hiervan

~ Mijn prog blog!


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-11 22:54

https://fgheysels.github.io/


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
de C++ equavilant is volgens mij .c_str, kan iemand dit bevestigen??
therat, kun je regel 11, 12 en 13 even toelichten wat je heir nu pcies doet? vind die kleurtjes redelijk irritant, kan niet zien wat nu functies, variabelen enz zijn.

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
sorry whoami, vergeten, de eerste keer :$

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:17
Dude, pak er eens een tutorial bij want je mist een groot gedeelte van de basis.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
klopt farlane, maar als ik eerst alle basis moet doornemen totdat ik bij het niveau ben dat ik nu even nodig heb is de deadline al lang voorbij, het gaat erom dat ik wat kleine moeilijke dingen nu nodig heb die ik over een tijd ook wel op school krijg, maar dan is het te laat.

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-11 22:54
bart0l0meus schreef op donderdag 29 november 2007 @ 21:35:
de C++ equavilant is volgens mij .c_str, kan iemand dit bevestigen??
therat, kun je regel 11, 12 en 13 even toelichten wat je heir nu pcies doet? vind die kleurtjes redelijk irritant, kan niet zien wat nu functies, variabelen enz zijn.
Kan je toch gewoon even opzoeken in de help ?
met farlane trouwens .... tintelende vingers

https://fgheysels.github.io/


  • VyperX
  • Registratie: Juni 2001
  • Laatst online: 12-11 16:48
Het probleem is nu alleen dat je geen duidelijk genoege vragen kan stellen.
(Sterker, als je dat wel zou kunnen, dan zou je dit waarschijnlijk wel kunnen oplossen...)

Anyway, om maar even wat behulpzamer te zijn:
Wat zit er in de int, en hoe wil je dat versturen? Beter gezegd, wil je de _waarde_ in de int oversturen, of wil je de int "printen" naar de compoort?

Een int is "normaalgesproken" 4 bytes groot, en past dus niet in 1 char, die slechts 1 byte groot is.
Stel dat de int de waarde 65535 heeft (16 bits = 2 bytes). Je kan dit opslaan als een "string" met waardes {255, 255, 0} (0 voor het afsluiten van de string), of als de string {'6', '5', '5', '3', '5', 0}.

Als je het laatste wil, dan moet je kijken naar de functie sprintf(), welke variabelen kan printen naar een string.

My Dwarf Fortress ASCII Reward: ~~@~~####,.".D",.B""


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
de int zal maximaal 255 zijn, en hij zal dus eigenlijk 5 x een int moeten versturen van maximaal 255, dus eerst #, dan 0-255, nog eens 0-255, dan nog eens 0-255 en dan nog eens 0-255 en nog eens 0-255.
Dus een voorbeeld kan zijn; #-001-128-255-64-255
hierbij krijg ik elke waarde tussen de 0 en 255 aangelevert dmv verschillende functies als een int. Het liefst plak ik al deze waarden aan elkaar zodat het het volgende wordt: #-00112825564255 en hem in een keer kan versturen. Maar dat zou dus met een array moeten als ik het goed begrijp, maar het lukt meer niet om een string om te zetten in een array
(voor meer info over de sendArray, check de code bovenaan)

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 29-11 23:35

Creepy

Tactical Espionage Splatterer

"Het lukt niet". Erg duidelijk ;)
Dus wat lukt er nu precies niet

die c_str() geeft direct een *char terug die je weer direct mee kan geven aan sendArray. Combineer dat met een inttostr en je kan een waarde als 255 omzetten naar een String, die string naar een *char en die versturen. Dus wat is nu nog precies je probleem dan?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        char *send;
        send = (char*) malloc(17);
        int getal1 = 1,getal2 = 2,getal3 = 3,getal4 = 4,getal5 = 5;
        sprintf(send,"#%03d%03d%03d%03d%03d",getal1,getal2,getal3,getal4,getal5);
        printf("%s\n",send);
        free(send);
        return 1;
}


zoiets zou wel moeten werken denk ik.

[ Voor 35% gewijzigd door Oezie Woezie op 29-11-2007 23:25 ]

een mooi Tshirt met Pim. is de beste enzo


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
nou oezie woezie, ik moet me aan de standaard functie houden zoals boven aan de pagina, in de vorm van sendArray((een char) lengte)
op de plaats van een char komt dan een variabele en op de plaats van lengte komt de lengte van de array.

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Met andere woorden: je snapt compleet niet wat Oezie Woezie laat zien. Hij kauwt zowat voor wat jij wilt. Deze topic heeft imho niet zoveel nut meer, het enige wat jij lijkt te willen is een stuk code wat jij direct kunt gebruiken, en verder mis je basale kennis waardoor je tips en opmerkingen van de rest in de topic niet goed kunt interpreteren.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 29-11 23:35

Creepy

Tactical Espionage Splatterer

bart0l0meus schreef op vrijdag 30 november 2007 @ 11:17:
nou oezie woezie, ik moet me aan de standaard functie houden zoals boven aan de pagina, in de vorm van sendArray((een char) lengte)
op de plaats van een char komt dan een variabele en op de plaats van lengte komt de lengte van de array.
Wat denk je dat de variabele send is? Precies, datgene dat je aan sendArray kan meegeven, namelijk een *char.
Ik moet .oisyn gelijk geven. Er zijn al heel wat dingen voorbij gekomen die bijna direct bruikbaar zijn. Iemand met een klein beetje C++ kennis zou de eindjes zo aan elkaar moeten kunnen knopen. Ook op mijn directe vraag wat nu nog precies je probleem is met alle informatie die er nu ligt geef je geen antwoord. Met de antwoorden die er nu liggen moet je er toch echt zelf uit kunnen komen. Zo niet dan is dat niet erg maar dan is het verstandig je nog eens goed te verdiepen in de basis van C en C++ want op deze manier ga je zelf ook niet veel verder komen ben ik bang.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.