Forum: PC-Programmierung String binär auslesen?!


von Joss (Gast)


Lesenswert?

Hallo...

Programmiersprache: C
Programm: cvi

Folgendes Problem habe ich:
Ich verfüge über ein Benutzerpanel mit diveresen Togglebuttons, welche 
mit Callbacks hinterlegt sind.

Ich habe ein Array:

cuPP[1]cM1[4]cM2[4]cHWY1[3]cHWY1[3]cAmp[3]

Nun möchte ich auf meine Benutzerpanel entsprechend den gedrückten 
Tasteneinen binären String ausgeben. D. h. ich möchte die aktuellen 
Werte aus dem Array auslesen und binär anzeigen. Dieser String sollte 
sich immer ändern, wenn Tasten zurückgesetzt oder gedrückt werden.... 
Kann mir jemand weiterhelfen...?!

von zwieblum (Gast)


Lesenswert?

> Ich habe ein Array:
>
> cuPP[1]cM1[4]cM2[4]cHWY1[3]cHWY1[3]cAmp[3]

EIN array ???

poste mal den code.

von Christian J. (joss)


Lesenswert?

Ziel ist es Relais schlaten zu können, verteilt auf zwei Printe.

Nun ist beispielsweise der uP-Print mit vier Relais bestückt.
Dafür habe ich ein Byte vergeben. -> cuPP[1]

Wenn ich nun auf der Benutzeroberfläche ein oder mehrere dieser vier 
Relais
mit den Togglebuttons aktiviere, sollte der String (des Befehls) auf dem
Panel ausgegeben werden, binär.

Code habe ich dazu noch keinen. :)

von Karl H. (kbuchegg)


Lesenswert?

In deiner Fragestellung widerspricht sich zb. die Verwendung der 
Begriffe "String" und "binär". Zum einen könnte man sagen, dass in einem 
Computer grundsätzlich alles binär ist, auf der anderen Seite wird der 
Begriff "String" praktisch ausschliesslich für Bytesequenzen verwendet, 
die einen Text ergeben, wenn man eine bestimmte Codierung (zb. ASCII) 
zugrundelegt.

Dein Frage ist ziemlich konfus. Wir wissen zwar was du tun willst, aber 
es ist nicht wirklich ersichtlich, wobei du nun konkret Schwierigkeiten 
hast.

Alles in allem klingt deine Frage (wie auch bei vielen anderen Fragern 
hier) wie: Ich hab zwar keine Ahnung von Programmierung, möchte aber ein 
Programm schreiben. Und zwar ohne, dass ich erst mal die Grundlagen 
lerne.

von Joss (Gast)


Lesenswert?

Ok, danke für deine Erläuterungen.

Grundsätzlich mötchte ich nur wissen, wie ein solcher String
ausgegeben werden kann. Mir fehlt tatsächlich das Wissen bezüglich
Programmierung etc....

hier mein Versuch:

char CheckString()
{

   char string [10];

  char buffer [100];
  char tmp [100];
  char b = 0;

  sprintf(buffer,"%d", UMM.cuPP[x]);


  SetCtrlVal (panelHandle, PANEL_String_Ausgabe, buffer);

return 0;
}

Mit "%d" wird doch bestimmt, dass dezimal ausgegeben wird, welcher 
Befehlt ist hier für binär?!


Mein UserInterface besteht aus 32 Togglebuttons. Jeder Button = 1bit, 
deshalb habe ich die vier Bit vergeben für cuPP[4].

Vielen Dank....

von Karl H. (kbuchegg)


Lesenswert?

Joss wrote:

> Mit "%d" wird doch bestimmt, dass dezimal ausgegeben wird, welcher
> Befehlt ist hier für binär?!

Es gibt keinen.
Und das ist kein Befehl, sondern eine Formatierangabe im Formatstring 
für printf (und nein: printf ist auch kein Befehl. printf ist eine 
Funktion)

von Joss (Gast)


Lesenswert?

okey...

somit kann auf diese Wiese nicht binär angezeigt werden?!

von Karl H. (kbuchegg)


Lesenswert?

Joss wrote:
> okey...
>
> somit kann auf diese Wiese nicht binär angezeigt werden?!

Genau.
Aber da du dich hartnäckig weigerst, mal einen einigermassen 
vollständigen Code anzugeben, in dem man auch erkennen kann, welchen 
Datentyp deine 'Arrays' haben, kann man dir auch nicht sagen welche der 
Funktionen aus der  xtoa Familie (so sie auf deinem System verfügbar 
sind) dafür geeignet sei

   itoa    wandelt einen Integer in seine Stringreräsentierung
   ltoa    wandelt einen Long in seine Stringrepräsentierung
   utoa    wandetl einen unsigned Integer
   ultoa   wandelt einen unsigne Long

allen Funktionen gemeinsam ist, dass man als letztes Argument angeben 
kann, zu welcher Basis man die Stringrepräsentierung haben will. Und 
wenn man da dann 2 angibt .....

von snaut (Gast)


Lesenswert?

Pro byte

void atobin(unsigned char byte)
{
   for(char i=0; i<8; i++)
   {
      printf("%u",(byte>>(7-i))& 0x01);
   }
}

Das gibt jeweils ein byte binaer in der form 10110011
aus.

von snaut (Gast)


Lesenswert?

sorry

meinte printbin oder so, nicht atobin

von Joss (Gast)


Lesenswert?

Danke, habe es für hex folgendermassen gemacht.
Mir ist noch nicht ganz klar wie ich deine Angaben nun einfüge?!

char CheckString()
{

   char string [10] = {0,0,0,0,0,0,0,0,0,0};

         char buffer [100];
        char tmp [10];
        char i = 0;

        strcpy (buffer,"S");
        for (i=0; i<1; ++i)
        {
          sprintf (tmp,"x%02X", UMM.cuPP[i]);
          strcat (buffer, tmp);
        }

SetCtrlVal (panelHandle, PANEL_String_Ausgabe, byte);

return 0;
}

von snaut (Gast)


Lesenswert?

void binary_sprintf(char *buffer, unsigned char byte)
{
   char *pos = buffer;

   for(char i=0; i<8; i++)
   {
      pos += sprintf(pos, "%u", (byte>>(7-i))& 0x01);
   }
}

char CheckString()
{
    char string [10] = "\0";

    char buffer [100];
    char tmp [10];
    char i = 0;

    strcpy (buffer,"S");
    for (i=0; i<1; ++i)
    {
      //sprintf (tmp,"x%02X", UMM.cuPP[i]);
      binary_sprintf(tmp, UMM.cuPP[i]);
      strcat (buffer, tmp);
    }

    SetCtrlVal (panelHandle, PANEL_String_Ausgabe, byte);

    return 0;
}

von Karl H. (kbuchegg)


Lesenswert?

> void binary_sprintf(char *buffer, unsigned char byte)
> {
>    char *pos = buffer;
>
>    for(char i=0; i<8; i++)
>    {
>      pos += sprintf(pos, "%u", (byte>>(7-i))& 0x01);
>    }
> }

Interessante Konstruktion.
Legal, wird funktionieren aber ... interessant

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.