mikrocontroller.net

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


Autor: Joss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...?!

Autor: zwieblum (Gast)
Datum:

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

EIN array ???

poste mal den code.

Autor: Christian Joss (joss)
Datum:

Bewertung
0 lesenswert
nicht 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. :)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Joss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okey...

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 .....

Autor: snaut (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: snaut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry

meinte printbin oder so, nicht atobin

Autor: Joss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: snaut (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.