<?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[Pointer auf char-array]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hoffe mir kann hier geholfen werden, denn ich sitze jetzt schon ein paar Stunden an der Sache und komm einfach nicht auf die Lösung.<br />
Ich habe folgendes Pascal-Programm geschrieben:</p>
<pre><code>type
  buchstabe     = 'a' .. 'z';
  buchstmenge   = set of buchstabe;
  TSetArray     = array[0..31] of byte;
  PSetArray     = ^TSetArray;    //Zeiger auf ein ByteArray

var
  wort             :  string;
  menge, schnitt   :  buchstmenge;
  i                :  byte;
  stock            :  integer;
  SetArray         :  PSetArray;
  BitSet           :  TSetArray;

procedure drucke( menge : buchstmenge );
var
  c    : buchstabe;
  leer : boolean;

begin
  leer := true;
  for c := 'a' to 'z' do
  begin
    if c in menge then
    begin
      write( c );
      leer := false;
    end  (* of if *)
  end;  (* of for *)
  if leer then writeln( ' leere Menge ' );
end;  (* of drucke *)

begin
  repeat
    stock    := 0;
    schnitt  := ['a'..'z'];
    menge    := [];
    SetArray := @menge;  (* Zuweisung unseres ByteArray-Zeigers durch einen
                          * Zeiger auf &quot;menge&quot;                             *)

    writeln( 'Bitte Wort eingeben' );
    readln( wort );

    (* Zunächst werden die Buchstaben des eingegebenen Wortes (wort:string)
     * in unseren Mengentyp (set of) &quot;menge&quot; geschrieben                   *)
    for i := 1 to length( wort ) do
    begin
      menge := menge + [wort[i&rsqb;&rsqb;;
    end;

    writeln; writeln;

    (* Jetzt wird überprüft, ob an der per Pointer verwiesenen Speicherstelle
     * das entsprechende Byte (durch &quot;i&quot; gegeben) einen Wert hat oder nicht.
     * Dabei gilt für die untenstehende Ausgabe die Bedingung, dass der Wert
     * ausschließlich 1 oder 2 oder 4 [...] Betragen darf, um zu überprüfen,
     * ob wirklich nur EIN BIT gesetzt wurde                                *)
      for i := 0 to 3 do
      begin
        //if ((SetArray^[i] and 255) &lt;&gt; 0) then
        if ((SetArray^[i] and (1 or 2 or 4 or 8 or 16 or 32 or 64 or 128)) &lt;&gt; 0) then
        begin
          BitSet[i] := 1;
          writeln( 'Byte ', (i+1), '   =   ', BitSet[i] );
        end  (* of if *)
        else
        begin
          BitSet[i] := 0;
          writeln( 'Byte ', (i+1), '   =   ', BitSet[i] );
        end;  (* of else *)
      end;  (* of for *)

    writeln;

    (* Der Wert der gesetzten Bytes wird ausgegeben *)

      for i := 0 to 3 do
      begin
        if (BitSet[i] = 1) then
        begin
          write( 'Byte ', (i+1), ' = ' );
          if (SetArray^[i] &lt;&gt; 0) then
          begin
            write( SetArray^[i], ' Bit ,  ' );
            stock := stock + 1;
          end;  (* of if *)
        end;  (* of if *)
      end; (* of for *)

    (* Jetzt wird noch geprüft, wieviele Buchstaben sich noch im Speicher
     * befinden                                                          *)
    case stock of
      0:
        begin;
          writeln; writeln;
          writeln( 'Kein Buchstabe mehr vorhanden' )
        end;  (* of 0 *)
      1:
        begin
          writeln; writeln;
          writeln( 'Nur noch ein Buchstabe vorhanden' );
        end;  (* of 1 *)
      2..100:
        begin
          writeln; writeln;
          writeln( 'Noch mehr als ein Buchstabe vorhanden' );
        end;  (* of 2..100 *)
      else
        begin
          writeln; writeln;
          writeln( 'Fehler bei Berechnung' );
        end;  (* of else *)
    end;  (* of case *)

    writeln; writeln;

    schnitt := schnitt * menge;
    drucke( menge ); writeln;
    drucke( schnitt );

    readln;
    writeln; writeln; writeln;
  until wort = 'exit';

end.
</code></pre>
<p>Es geht mir hier darum, dass ich anhand der Speicheradresse auslesen kann, welche Bits im allokierten Speicher &quot;gesetzt&quot; sind.</p>
<p>Jetzt möchte ich selbiges in C++ umsetzen, jedenfalls ähnlich. Alle meine bisherigen Versuche sind gescheitert.</p>
<pre><code class="language-cpp">char chr[32];

int main()
{
	cout &lt;&lt; &quot;Bitte Wort eingeben&quot; &lt;&lt; endl;
	cin &gt;&gt; chr;
	byte *myBytes[32];
	myBytes[32] = (byte*)&amp;chr;

	int *x = (int*)chr;
	byte *y = (byte*)x;

	for( int i = 0; i &lt; 19; i++ )
	{
		myBytes[i] = (byte*)y;
		cout &lt;&lt; *x &lt;&lt; &quot;\t&quot; &lt;&lt; *y &lt;&lt; endl;
		*x = *x +1;	
	}
}
</code></pre>
<p>Ich kann natürlich die Adresse im Speicher auslesen und die Werte verändern. Explizit die Bits auszulesen will mir aber einfach nicht gelingen. Wahrscheinlich stelle ich mich auch einfach zu blöd an, aber ...</p>
<p>Ich würde mich freuen, wenn ihr mir helfen könntet.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233222/pointer-auf-char-array</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 02:17:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233222.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Feb 2009 11:19:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer auf char-array on Mon, 02 Feb 2009 11:19:22 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hoffe mir kann hier geholfen werden, denn ich sitze jetzt schon ein paar Stunden an der Sache und komm einfach nicht auf die Lösung.<br />
Ich habe folgendes Pascal-Programm geschrieben:</p>
<pre><code>type
  buchstabe     = 'a' .. 'z';
  buchstmenge   = set of buchstabe;
  TSetArray     = array[0..31] of byte;
  PSetArray     = ^TSetArray;    //Zeiger auf ein ByteArray

var
  wort             :  string;
  menge, schnitt   :  buchstmenge;
  i                :  byte;
  stock            :  integer;
  SetArray         :  PSetArray;
  BitSet           :  TSetArray;

procedure drucke( menge : buchstmenge );
var
  c    : buchstabe;
  leer : boolean;

begin
  leer := true;
  for c := 'a' to 'z' do
  begin
    if c in menge then
    begin
      write( c );
      leer := false;
    end  (* of if *)
  end;  (* of for *)
  if leer then writeln( ' leere Menge ' );
end;  (* of drucke *)

begin
  repeat
    stock    := 0;
    schnitt  := ['a'..'z'];
    menge    := [];
    SetArray := @menge;  (* Zuweisung unseres ByteArray-Zeigers durch einen
                          * Zeiger auf &quot;menge&quot;                             *)

    writeln( 'Bitte Wort eingeben' );
    readln( wort );

    (* Zunächst werden die Buchstaben des eingegebenen Wortes (wort:string)
     * in unseren Mengentyp (set of) &quot;menge&quot; geschrieben                   *)
    for i := 1 to length( wort ) do
    begin
      menge := menge + [wort[i&rsqb;&rsqb;;
    end;

    writeln; writeln;

    (* Jetzt wird überprüft, ob an der per Pointer verwiesenen Speicherstelle
     * das entsprechende Byte (durch &quot;i&quot; gegeben) einen Wert hat oder nicht.
     * Dabei gilt für die untenstehende Ausgabe die Bedingung, dass der Wert
     * ausschließlich 1 oder 2 oder 4 [...] Betragen darf, um zu überprüfen,
     * ob wirklich nur EIN BIT gesetzt wurde                                *)
      for i := 0 to 3 do
      begin
        //if ((SetArray^[i] and 255) &lt;&gt; 0) then
        if ((SetArray^[i] and (1 or 2 or 4 or 8 or 16 or 32 or 64 or 128)) &lt;&gt; 0) then
        begin
          BitSet[i] := 1;
          writeln( 'Byte ', (i+1), '   =   ', BitSet[i] );
        end  (* of if *)
        else
        begin
          BitSet[i] := 0;
          writeln( 'Byte ', (i+1), '   =   ', BitSet[i] );
        end;  (* of else *)
      end;  (* of for *)

    writeln;

    (* Der Wert der gesetzten Bytes wird ausgegeben *)

      for i := 0 to 3 do
      begin
        if (BitSet[i] = 1) then
        begin
          write( 'Byte ', (i+1), ' = ' );
          if (SetArray^[i] &lt;&gt; 0) then
          begin
            write( SetArray^[i], ' Bit ,  ' );
            stock := stock + 1;
          end;  (* of if *)
        end;  (* of if *)
      end; (* of for *)

    (* Jetzt wird noch geprüft, wieviele Buchstaben sich noch im Speicher
     * befinden                                                          *)
    case stock of
      0:
        begin;
          writeln; writeln;
          writeln( 'Kein Buchstabe mehr vorhanden' )
        end;  (* of 0 *)
      1:
        begin
          writeln; writeln;
          writeln( 'Nur noch ein Buchstabe vorhanden' );
        end;  (* of 1 *)
      2..100:
        begin
          writeln; writeln;
          writeln( 'Noch mehr als ein Buchstabe vorhanden' );
        end;  (* of 2..100 *)
      else
        begin
          writeln; writeln;
          writeln( 'Fehler bei Berechnung' );
        end;  (* of else *)
    end;  (* of case *)

    writeln; writeln;

    schnitt := schnitt * menge;
    drucke( menge ); writeln;
    drucke( schnitt );

    readln;
    writeln; writeln; writeln;
  until wort = 'exit';

end.
</code></pre>
<p>Es geht mir hier darum, dass ich anhand der Speicheradresse auslesen kann, welche Bits im allokierten Speicher &quot;gesetzt&quot; sind.</p>
<p>Jetzt möchte ich selbiges in C++ umsetzen, jedenfalls ähnlich. Alle meine bisherigen Versuche sind gescheitert.</p>
<pre><code class="language-cpp">char chr[32];

int main()
{
	cout &lt;&lt; &quot;Bitte Wort eingeben&quot; &lt;&lt; endl;
	cin &gt;&gt; chr;
	byte *myBytes[32];
	myBytes[32] = (byte*)&amp;chr;

	int *x = (int*)chr;
	byte *y = (byte*)x;

	for( int i = 0; i &lt; 19; i++ )
	{
		myBytes[i] = (byte*)y;
		cout &lt;&lt; *x &lt;&lt; &quot;\t&quot; &lt;&lt; *y &lt;&lt; endl;
		*x = *x +1;	
	}
}
</code></pre>
<p>Ich kann natürlich die Adresse im Speicher auslesen und die Werte verändern. Explizit die Bits auszulesen will mir aber einfach nicht gelingen. Wahrscheinlich stelle ich mich auch einfach zu blöd an, aber ...</p>
<p>Ich würde mich freuen, wenn ihr mir helfen könntet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656427</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf char-array on Mon, 02 Feb 2009 11:53:48 GMT]]></title><description><![CDATA[<p>Was soll <code>byte</code> sein? Ein <code>typedef</code> auf <code>char</code> ? Ein <code>char</code> -Array besteht bereits aus einzelnen Bytes. Wenn du deren Zahlenwerte willst, brauchst du noch zu <code>int</code> (z.B.) umzuwandeln, damit auf der Konsole Ziffern und nicht Zeichen ausgegeben werden.</p>
<p>Um an die einzelnen Bits zu kommen, kannst du <a href="http://www.cplusplus.com/reference/stl/bitset/" rel="nofollow">std::bitset</a> verwenden.</p>
<p>Hier mal das Beispiel für ein Byte:</p>
<pre><code class="language-cpp">char* Text = &quot;Hallo&quot;;

// weist das Bitmuster des ersten Zeichens von Text ('H') zu
std::bitset&lt;8&gt; Byte = static_cast&lt;unsigned long&gt;(Text[0]); 

// gibt dir die Binärfolge als std::string aus.
std::cout &lt;&lt; Byte.to_string &lt;&lt; std::endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1656445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656445</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Feb 2009 11:53:48 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf char-array on Mon, 02 Feb 2009 12:34:15 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Was soll <code>byte</code> sein? Ein <code>typedef</code> auf <code>char</code> ? Ein <code>char</code> -Array besteht bereits aus einzelnen Bytes. Wenn du deren Zahlenwerte willst, brauchst du noch zu <code>int</code> (z.B.) umzuwandeln, damit auf der Konsole Ziffern und nicht Zeichen ausgegeben werden.</p>
<p>Um an die einzelnen Bits zu kommen, kannst du <a href="http://www.cplusplus.com/reference/stl/bitset/" rel="nofollow">std::bitset</a> verwenden.</p>
<p>Hier mal das Beispiel für ein Byte:</p>
<pre><code class="language-cpp">char* Text = &quot;Hallo&quot;;

// weist das Bitmuster des ersten Zeichens von Text ('H') zu
std::bitset&lt;8&gt; Byte = static_cast&lt;unsigned long&gt;(Text[0]); 

// gibt dir die Binärfolge als std::string aus.
std::cout &lt;&lt; Byte.to_string &lt;&lt; std::endl;
</code></pre>
</blockquote>
<p>Byte ist ein typedef auf unsigned char ja ... Ich schau es mir gleich mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656478</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer auf char-array on Mon, 02 Feb 2009 12:48:26 GMT]]></title><description><![CDATA[<p>Eventuell musst du bei <code>to_string</code> noch die Templateparameter angeben (und natürlich die Funktionsklammern, die ich hier vergessen habe).</p>
<p>Auf <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> findest du dazu auch Beispielcodes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656490</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Feb 2009 12:48:26 GMT</pubDate></item></channel></rss>