<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[bits im char Array[] adressieren]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich möchte in einem array[8] einzelne bits mit einer variablen adressieren und dann einen wert 1 oder 0 zuweisen:</p>
<pre><code class="language-cpp">void set(bit0, bit1, bit2..., bit7)
{
    bit0 = 1;
    .
    .

}

void something()
{
    char data[8];
    datentyp?? Bit0 = bit0 aus data[0];

    for(i=0;i&lt;8;i++)
        set(Bit0,...Bit7);
}
</code></pre>
<p>Es gefällt mir vorne und hinten nicht, aber ich weiß nicht wie ich es auf elegante art und weise lösen kann.</p>
<p>Der sinn des ganzen ist, dass der benutzer nur zwei funktionen set und clear kennen soll. Außerdem soll der user die namen für die bits verändern können.<br />
z.b. statt bit0 auch Test0 oder PeterPaul<br />
Diesen funktionen werden nur bits übergeben die im array manipuliert werden müssen.</p>
<p>Wie kann ich denn der funktion set() den nullten bit aus data[0] übergeben?<br />
Und wie kann ich dem user möglichkeit geben namen des bits zu verändern?</p>
<p>bin dankbar für jeden hinweis <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231579/bits-im-char-array-adressieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 17:42:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231579.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jan 2009 21:35:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 21:35:50 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich möchte in einem array[8] einzelne bits mit einer variablen adressieren und dann einen wert 1 oder 0 zuweisen:</p>
<pre><code class="language-cpp">void set(bit0, bit1, bit2..., bit7)
{
    bit0 = 1;
    .
    .

}

void something()
{
    char data[8];
    datentyp?? Bit0 = bit0 aus data[0];

    for(i=0;i&lt;8;i++)
        set(Bit0,...Bit7);
}
</code></pre>
<p>Es gefällt mir vorne und hinten nicht, aber ich weiß nicht wie ich es auf elegante art und weise lösen kann.</p>
<p>Der sinn des ganzen ist, dass der benutzer nur zwei funktionen set und clear kennen soll. Außerdem soll der user die namen für die bits verändern können.<br />
z.b. statt bit0 auch Test0 oder PeterPaul<br />
Diesen funktionen werden nur bits übergeben die im array manipuliert werden müssen.</p>
<p>Wie kann ich denn der funktion set() den nullten bit aus data[0] übergeben?<br />
Und wie kann ich dem user möglichkeit geben namen des bits zu verändern?</p>
<p>bin dankbar für jeden hinweis <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644181</guid><dc:creator><![CDATA[Hazzard_2009]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 21:43:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char c=0;
c|=(1&lt;&lt;3);  //Bit 3 von rechts setzen (bitweises Oder)
c&amp;=~(1&lt;&lt;5); //Bit 5 von rechts löschen (bitweises Und)
</code></pre>
<p>Such mal nach Bitoperationen, Bitshift...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644183</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 21:51:52 GMT]]></title><description><![CDATA[<p>So?</p>
<pre><code class="language-cpp">bool GetBit( const char* data, int bit )
{
	return data[ bit &gt;&gt; 3 ] &amp; 1 &lt;&lt; ( bit &amp; 7 );
}

void SetBit( char* data, int bit )
{
	data[ bit &gt;&gt; 3 ] |= 1 &lt;&lt; ( bit &amp; 7 );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1644190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644190</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 21:54:20 GMT]]></title><description><![CDATA[<p>Du kannst dir auch mal <code>std::bitset</code> aus der STL anschauen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644192</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:54:20 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 21:55:32 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Du kannst dir auch mal <code>std::bitset</code> aus der STL anschauen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Aber wenn ers doch selbst machen will! ;P Ansonsten wär std::vector&lt;bool&gt; evtl auch interessant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644193</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 21:56:42 GMT]]></title><description><![CDATA[<p>Er fragte ja nach einer eleganten Art und Weise. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Wenn er es nicht gleich braucht, kann er es ja immer noch im Hinterkopf behalten, damit es ihm später einmal nützlich sein kann.</p>
<p>P.S. Es gibt auch noch <code>boost::dynamic_bitset</code> . :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644195</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:56:42 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 21:57:21 GMT]]></title><description><![CDATA[<p>std::vector&lt;bool&gt; ist böse und sollt enicht benutzt werden!<br />
Frag mich jetzt nicht nach den Gründen, aber es gab gute devfür, die damit zu tun hatten, dass es eine Template-spezialisierung ist.<br />
stattdessen, sollte man std::bitset benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644198</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 22:03:47 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>std::vector&lt;bool&gt; ist böse und sollt enicht benutzt werden!<br />
Frag mich jetzt nicht nach den Gründen, ...</p>
</blockquote>
<p>Das macht deine Behauptung äusserst glaubwürdig... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>stattdessen, sollte man std::bitset benutzen.</p>
</blockquote>
<p>Sicher, weil man ja immer zur Compilezeit die Grösse weiss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644199</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Mon, 12 Jan 2009 22:09:42 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>std::vector&lt;bool&gt; ist böse und sollt enicht benutzt werden!</p>
</blockquote>
<p>wieso?</p>
<blockquote>
<p>Frag mich jetzt nicht nach den Gründen</p>
</blockquote>
<p>oh, sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644204</guid><dc:creator><![CDATA[wat?]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Tue, 13 Jan 2009 07:24:40 GMT]]></title><description><![CDATA[<p>danke erstmal an alle für die Tips!<br />
ich werde es heute angesprochenes auprobieren -&gt; std::bitset hört sich gut an</p>
<p>Mein Programm ist nur eine Scnittstelle zu einem Gerät in Form einer Programmbibliothek.<br />
Es werden 8 Byte hin und her gesendet mittels array[8].<br />
User wird in seinem programm (C, BASIC, ..) bestimmte bits im array[8] auf 1 oder 0 setzen und danach versenden.</p>
<p>DLL ist allgemein zu halten. Es muss für User möglich sein die Namen für die Bits selbst zu definieren.<br />
Ich könnte also sowas machen:</p>
<pre><code class="language-cpp">union
{
	struct
	{
		char bit0: 1;
		cahr bit1: 1;
    		...
		char bit7: 1;
	}byte;
	char byte0;
	...
	cahr byte7;
}Bytes;    

Bytes.byte0.bit0 = 1;

//nun möchte ich, dass User diesen ganzen Bit/Byre Kramm 
//nicht zu sehen bekommmt, für Bytes.byte0.bit0 soll er selbst namen vergeben.

//irgendwas in diese Richtung

char* User_Def_Name_1 = &amp;Bytes.byte0.bit0; //weiß nicht ob das geht
...
char* User_Def_Name_64 = &amp;Bytes.byte7.bit7;

//für Bitmanipulation sollen dem user nur zwei Funktionen
//zur Verfügung stehen

//Bits auf 1 setzen
set_bit(User_Def_Name_1,....User_Def_Name64);

//Bits auf 0 setzen
clear_bit(User_Def_Name_1,....User_Def_Name64);
</code></pre>
<p>Hat jemand eine Idee wie ich es elegant schaffen kann, dass der Benutzer<br />
die NAmen für Bits festlegen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644289</guid><dc:creator><![CDATA[Hazzard_2009]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Tue, 13 Jan 2009 07:53:38 GMT]]></title><description><![CDATA[<p>Wie wäre es, wenn du den Benutzer einfach ein Enum erstellen lassen könntest? Dann kann er wahlweise auch mit Zahlen zugreifen.</p>
<pre><code class="language-cpp">enum Bit
{
    UserDef0,
    UserDef1,
    ...
    UserDef63
};
</code></pre>
<p>Jetzt können die Funktionen folgendermassen aufgerufen werden:</p>
<pre><code class="language-cpp">set_bit(UserDef12, true);
set_bit(12, true);
set_bit(8*1 + 4, true);
</code></pre>
<p>Der letzte Fall ist für die Übersichtlichkeit, wenn man die Gliederung behalten will. Wie ist es, soll der Anwender die Unterteilung in 8*8 Bit kennen oder hat er 64 indifferente Bits zur Verfügung? Denn wenn er die Unterteilung kennen sollte, kann man auch eine entsprechende Funktion schreiben:</p>
<pre><code class="language-cpp">void set_bit(char byte, char bit, bool value);
</code></pre>
<p><em>Edit: UserDef64 auf 63 geändert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644292</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Tue, 13 Jan 2009 07:34:24 GMT]]></title><description><![CDATA[<p>Zusätzliche Elemente deines structs, beispielsweise std::string, für die Namen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644293</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Tue, 13 Jan 2009 11:48:54 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>std::vector&lt;bool&gt; ist böse und sollt enicht benutzt werden!<br />
Frag mich jetzt nicht nach den Gründen, ...</p>
</blockquote>
<p>Das macht deine Behauptung äusserst glaubwürdig... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>stattdessen, sollte man std::bitset benutzen.</p>
</blockquote>
<p>Sicher, weil man ja immer zur Compilezeit die Grösse weiss.</p>
</blockquote>
<p>Kennst du Scott Meyers?<br />
Der hat großartige Bücher geschrieben:<br />
Effective C++(kostenlos hier: <a href="http://xxx" rel="nofollow">xxx</a>)<br />
More Effective C++<br />
Effective STL (kostenlos hier: <a href="http://xxx" rel="nofollow">xxx</a> )</p>
<p>Item 18 des letztbesagten buchs empfielt &quot;Avoid using vector&lt;bool&gt;&quot;</p>
<p>der Absatz beginnt mit:</p>
<p>Scott Meyers schrieb:</p>
<blockquote>
<p>As an STL container, there are really only two things wrong with vector&lt;bool&gt;. First,<br />
it's not an STL container. Second, it doesn't hold bools.</p>
</blockquote>
<p>Jetzt weiß ich auch wieder wo das problem war:<br />
vector&lt;bool&gt; ist eine template spezialisation.<br />
Tatsächlich ist es ein intvector, der bei zugriffen die bits aus den ints fummlet und dann als bool zurückgibt.<br />
Das hat zur Folge, dass du von einem Vectorelement keinen Pointer hohlen und keine Referenz anlegen kannst, da immer ein lokales neues bool erzeugt wird.</p>
<pre><code class="language-cpp">vector&lt;bool&gt; vec(15, true);

bool&amp; elem = vec[5];
elem = false;  //  &lt;- das hat keinen einfluss auf das element im Vector.

bool* bptr = &amp;vec[2];
*bptr = falsE;  //  &lt;- das hat ebenfalls keinen einfluss auf das element im Vector.
</code></pre>
<p>Das sind so lauter spezialfälle, an die man nicht denkt, wenn man ahnungslos einen vector&lt;bool&gt; erzeugt.<br />
Normalerweise würde man ja annehmen, dass er sich wie ein vector&lt;irgendwas&gt; verhält nur halt mit bools statt irgendwas.</p>
<p>Edit:<br />
hier noch ein äußerst gehaltvoller Download:<br />
Effective c++ CD (CD mit Effective C++, More Effective C++, sowie artikeln und codebeispielen)<br />
<a href="http://xxx" rel="nofollow">xxx</a></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4921">@mod</a>:<br />
vielleicht sollte man die links in irgendeine faq eintragen, falls es noch nix gibt.<br />
Die bücher sind auf jeden Fall sehr informativ.</p>
<p>Edit 2:<br />
ok, hab grad noch mal nachgelesen:<br />
das ein lokales bool zurückgegeben wird, stimmt so auch nicht ganz. Es wird irgend ein Proxyobject zurückgegeben, weswegen der oben geschriebenen Code nicht mal compilieren sollte.<br />
aber lests euch am besten selbst durch.</p>
<p>Edit 3:<br />
da ich jetzt doch an der legalität von knowfree zweifle, hab ich die links wieder entfernt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644440</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Tue, 13 Jan 2009 11:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Tue, 13 Jan 2009 11:34:18 GMT]]></title><description><![CDATA[<p>Scott Meyers schrieb:</p>
<blockquote>
<p>As an STL container, there are really only two things wrong with vector&lt;bool&gt;. First,<br />
it's not an STL container. Second, it doesn't hold bools.</p>
</blockquote>
<p>Scott wollte wohl eher darauf aufmerksam machen, dass vector&lt;bool&gt; nicht unbedingt das macht was man, auf den ersten Blick, erwarten würde: Nämlich eine Liste von bool'schen Typen bereitstellen.<br />
Aber an dieser Stelle ist die Funktionalität genau die, die man wünscht. Lediglich der Name kann verwirrend sein, ansonsten seh ich kein Argument gegen den Einsatz von vector&lt;bool&gt;.</p>
<p>Wenn der Name stört (oder ggf die spezialisierte Variante aus dem Standard entfernt werden sollte) kann man sich ja per Typendefinition abhelfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644447</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 13 Jan 2009 11:34:18 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Tue, 13 Jan 2009 12:29:13 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>(kostenlos hier: <a href="http://xxx" rel="nofollow">xxx</a>)</p>
</blockquote>
<p>Ich würde auch den Verweis &quot;kostenlos hier&quot; entfernen, diese Bücher sind nicht legal frei erhältlich.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644490</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 13 Jan 2009 12:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Tue, 13 Jan 2009 22:00:06 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Jetzt weiß ich auch wieder wo das problem war:</p>
</blockquote>
<p>Okay, dann glaube ich dir jetzt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
War vorhin nicht böse gemeint, aber ich habe an deiner Aussage gezweifelt, weil ich noch nie etwas diesbezüglich gehört habe und du keine Argumente gebracht hast. Aber gut, so habe ich wieder was gelernt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Trotzdem stimme ich David_pb zu. Gerade wenn man nur die Standardbibliothek benutzt und ein dynamisches Bitset will, ist <code>std::vector&lt;bool&gt;</code> okay. Und weil es eine Template<strong>spezialisierung</strong> ist, kann man auch erwarten, dass sich das Verhalten irgendwie vom normalen <code>vector</code> -Klassentemplate unterscheidet. Auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> ist die Sache beispielsweise gut erklärt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644943</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 22:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Wed, 14 Jan 2009 13:24:38 GMT]]></title><description><![CDATA[<p>hab das ganze vorerst so gelöst (grobe skizze):</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;bitset&gt;

void set_bit(int test1 = 0, int test2 = 0, int test3=0) 
{          
        char data[8];
        int test_cnt[8];
        int i;

        test_cnt[0]=test1;
        test_cnt[1]=test2;
        test_cnt[2]=test3;

        //init data
        for(i=0;i&lt;7;i++)
                data[i]=0x00;

        for(i=0;i&lt;8;i++)
        {
            if(0&lt;test_cnt[i]&lt;8)
            {  
               data[0]|=test_cnt[i];
            }
            if(7 &lt; test_cnt[i] &lt; 16) 
            {
               test_cnt[i]=test_cnt[i]-8;
               data[1]|=test_cnt[i];
            }
            if(15 &lt; test_cnt[i] &lt; 24) 
            {
               test_cnt[i]=test_cnt[i]-16;
               data[2]|=test_cnt[i];
            }
            if(23 &lt; test_cnt[i] &lt; 32) 
            {
               test_cnt[i]=test_cnt[i]-24;
               data[3]|=test_cnt[i];
            }
        }        
}; 

int main() 
{ 
        //für user verfügbare variablen (evtl. als defines)
        const int a= 8;
        const int b= 17;
        const int c= 28; 

        //user eigene variablen (änderung der varsnamen von oben)
        int LED1 = a;
        int LED2 = b;
        int POWER = c; 

        set_bit(LED1, POWER); 
        set_bit(LED1, LED2); 
}
</code></pre>
<p>bin mit den ganzen ifs nicht ganz glücklich, deshalb werden daran noch<br />
arbeiten um es eleganter zu lösen.</p>
<p>danke an alle für Support</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645324</guid><dc:creator><![CDATA[Hazzard_2009]]></dc:creator><pubDate>Wed, 14 Jan 2009 13:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Wed, 14 Jan 2009 13:38:08 GMT]]></title><description><![CDATA[<p>Die vier If-Abfragen könntest du wenigstens noch zu einer Schleife zusammenfassen.</p>
<p>Zudem:</p>
<pre><code class="language-cpp">//für user verfügbare variablen (evtl. als defines)
        const int a= 8;
        const int b= 17;
        const int c= 28; 

        //user eigene variablen (änderung der varsnamen von oben)
        int LED1 = a;
        int LED2 = b;
        int POWER = c;
</code></pre>
<p>Wieso nimmst du hier nicht Enumerationen? <code>#define</code> wäre wohl die hässlichste Lösungsvariante.</p>
<pre><code class="language-cpp">enum BitAccessor // BitAccessor ist auch gleich ein Typ.
{
    a = 8,
    b = 17,
    c = 28,
};
</code></pre>
<p>Oder du lässt den User gleich das Enum selbst erstellen. Wieso soll er nochmals Variablen mit anderem Namen, die aber nichts bringen, kreieren?</p>
<p>Und wenn du schon <code>&lt;bitset&gt;</code> inkludierst, könntest du es auch gleich benutzen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645340</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 14 Jan 2009 13:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Wed, 14 Jan 2009 13:55:04 GMT]]></title><description><![CDATA[<p>@Hazzard_2009: Was hast du gegen mein Vorschlag?</p>
<pre><code class="language-cpp">bool GetBit( const char* data, int bit ) 
{ 
    return data[ bit &gt;&gt; 3 ] &amp; 1 &lt;&lt; ( bit &amp; 7 ); 
} 

void SetBit( char* data, int bit ) 
{ 
    data[ bit &gt;&gt; 3 ] |= 1 &lt;&lt; ( bit &amp; 7 ); 
}
</code></pre>
<p>Edit:<br />
Dein Code hat übrigens Fehler, wenn <em>a, b und c</em> die zu setzenden Bits sein sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645345</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 14 Jan 2009 13:55:04 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Wed, 14 Jan 2009 14:23:50 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a></p>
<blockquote>
<p>Wieso nimmst du hier nicht Enumerationen</p>
</blockquote>
<p>stimmmt. das kommt mir sehr entgegen. werde ich nehmen</p>
<pre><code class="language-cpp">enum Leiterkarte // BitAccessor ist auch gleich ein Typ.
{
    a = 8,
    b = 17,
    c = 28,
};
Leiterkarte lk1, kl2; //jede lk beinhaltet 60 leitungen
</code></pre>
<blockquote>
<p>Wieso soll er nochmals Variablen mit anderem Namen, die aber nichts bringen, kreieren?</p>
</blockquote>
<p>Genau die Namen sind's: Ich habe insgesamt 2 x60 Leitungen.<br />
Im Gerät heißen sie A1,B1,C1 bis A30,B30,C30.<br />
User soll in der lage sein diese Leitungen selbs zu benamen,<br />
damit er im Code(Testprogramm) wissen kann was er da schaltet:<br />
B28 sagt nix aus, LED1 oder POWER ist schon eindeutig.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10754">@David_pb</a>:</p>
<blockquote>
<p>Was hast du gegen mein Vorschlag?</p>
</blockquote>
<p>Funktionsaufruf muss so allgemein und einfach gehalten werden.<br />
Deshalb auch variable Parameter zahl. Der User kann nur eine Leitung schalten,<br />
oder gleich alle 120.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645388</guid><dc:creator><![CDATA[Hazzard_2009]]></dc:creator><pubDate>Wed, 14 Jan 2009 14:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Wed, 14 Jan 2009 14:28:19 GMT]]></title><description><![CDATA[<blockquote>
<p>Und wenn du schon &lt;bitset&gt; inkludierst, könntest du es auch gleich benutzen.</p>
</blockquote>
<p>hab mit sdt::bitset rumexperimentiert (nach vorschalg von David_pb)<br />
und werde es weiterhin tun. hab aber für obige variante vergessen zu löschen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645396</guid><dc:creator><![CDATA[Hazzard_2009]]></dc:creator><pubDate>Wed, 14 Jan 2009 14:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to bits im char Array[] adressieren on Wed, 14 Jan 2009 14:32:13 GMT]]></title><description><![CDATA[<p>Hazzard_2009 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Leiterkarte lk1, kl2; //jede lk beinhaltet 60 leitungen
</code></pre>
</blockquote>
<p>Ich weiss nicht, ob du das falsch verstanden hast. <code>lk1</code> und <code>lk2</code> beinhalten hier nur die Nummer (also einen <code>int</code> ) des Enums. Da du diese nicht initialisierst, ist die Nummer nicht mal eine gültige Konstante der <code>Leiterkarte</code> -Aufzählung.</p>
<p>Hazzard_2009 schrieb:</p>
<blockquote>
<p>Genau die Namen sind's: Ich habe insgesamt 2 x60 Leitungen.<br />
Im Gerät heißen sie A1,B1,C1 bis A30,B30,C30.<br />
User soll in der lage sein diese Leitungen selbs zu benamen,<br />
damit er im Code(Testprogramm) wissen kann was er da schaltet:<br />
B28 sagt nix aus, LED1 oder POWER ist schon eindeutig.</p>
</blockquote>
<p>Aber wieso dann überhaupt A1, B1 und so? Lohnt sich die Abstraktion wirklich? Sonst kannst du ja gleich eine Funktion schreiben, die dir die Nummer des x-ten Bit aus dem y-ten Byte angibt.</p>
<pre><code class="language-cpp">char GetBitNumber(char Byte, char Bit)
{
    return 8*Byte + Bit;
}
</code></pre>
<p>Finde ich persönlich schöner, als alle Konstanten zu duplizieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645404</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 14 Jan 2009 14:32:13 GMT</pubDate></item></channel></rss>