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...?!
> Ich habe ein Array: > > cuPP[1]cM1[4]cM2[4]cHWY1[3]cHWY1[3]cAmp[3] EIN array ??? poste mal den code.
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. :)
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.
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....
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)
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 .....
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.
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; }
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; }
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.