<?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[Zahlensystem - Basis konvertieren]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich möchte ein Programm erstellen, womit ich eine zahl beliebiger Basis in eine neue Basis konvertieren kann.<br />
der code, den ich geschrieben hat, ist natürlich noch nicht vollständig, aber ich kann mir im moment nicht erklären, warum eine konvertierung von zB:<br />
12012 (basis 3) zur basis 10 noch nicht klappt.</p>
<p>Es kommt auch kein Fehler, keine Warnung, nur wenn ich das Programm starte, stürzt es gleich wieder ab.</p>
<p>Ich hoffe, jemand kann mir helfen,<br />
Gruß</p>
<p>Hier der Code</p>
<pre><code>include &lt;iostream&gt;
using namespace std;

int exp(int base,int exponent) //exponential function
{ int result,i;
	if(exponent==0)
		result=1;

	else if (exponent=1)
		result=base;

	for(i=1;i&lt;exponent;i++)
		{
		  result=base*result;
		}
	return result;
}

int arbitToDec (char value[], int oldBase ) //converting to the decimal system
{
	int length=strlen(value), result=0;

	for (int i=0; i&lt;length; i++)
	{
		if (value[i] &gt;= '0' &amp;&amp; value[i] &lt;= '9'  )
			result=(exp(oldBase,(length-i-1)))*((value[i]-'0')+result);

		else if (value[i] &gt;= 'a' &amp;&amp; value[i] &lt;= 'z')
			result=exp(oldBase,(length-i-1))*(value[i]-'a'+10)+result;

		else if (value[i] &gt;='A' &amp;&amp; value[i] &lt;='Z')
			result=exp(oldBase,(length-i-1))*(value[i]-'A'+10)+result;

	}

	return result;
}

// converting from the decimal to an arbitrary system
int decToArbit (int value, int newBase )

{ int tempVal[32], newLength=0;

	for (int i=0;tempVal!=0;i++)
	{
	tempVal[i]=value%newBase;
	value=value/newBase;
	newLength++;

	}

	for(int i=0;i&lt;newLength;i++)
	{

	cout &lt;&lt; tempVal[i]; 
	}
	return 0;
}

void main ()
{	char value[32];
	int oldBase=0, newBase, valueInDec=arbitToDec(value, oldBase);

	cout &lt;&lt; endl &lt;&lt; &quot;Please, enter a Number that you want to convert in a base ranging from 2 to 36!&quot; &lt;&lt; endl;
	cin &gt;&gt; value;

	cout &lt;&lt; &quot;What is the base of this number?&quot; &lt;&lt; endl;
	cin &gt;&gt; oldBase;

	cout &lt;&lt; &quot;In what base should your number be converted? Please, choose a base ranging from 2 to 36!&quot; &lt;&lt; endl;
	cin &gt;&gt; newBase;

	cout &lt;&lt; &quot;The number  &quot; &lt;&lt; value &lt;&lt; &quot;  in the base  &quot; &lt;&lt; oldBase &lt;&lt; &quot;  is  &quot; &lt;&lt; decToArbit(valueInDec, newBase) &lt;&lt; &quot;  in base  &quot; &lt;&lt; newBase &lt;&lt; endl;

	//arbitToDec(value.c_str(), oldBase)

	system(&quot;pause&quot;);

	//return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/258680/zahlensystem-basis-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 04:53:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258680.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Jan 2010 17:40:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zahlensystem - Basis konvertieren on Wed, 13 Jan 2010 17:40:29 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich möchte ein Programm erstellen, womit ich eine zahl beliebiger Basis in eine neue Basis konvertieren kann.<br />
der code, den ich geschrieben hat, ist natürlich noch nicht vollständig, aber ich kann mir im moment nicht erklären, warum eine konvertierung von zB:<br />
12012 (basis 3) zur basis 10 noch nicht klappt.</p>
<p>Es kommt auch kein Fehler, keine Warnung, nur wenn ich das Programm starte, stürzt es gleich wieder ab.</p>
<p>Ich hoffe, jemand kann mir helfen,<br />
Gruß</p>
<p>Hier der Code</p>
<pre><code>include &lt;iostream&gt;
using namespace std;

int exp(int base,int exponent) //exponential function
{ int result,i;
	if(exponent==0)
		result=1;

	else if (exponent=1)
		result=base;

	for(i=1;i&lt;exponent;i++)
		{
		  result=base*result;
		}
	return result;
}

int arbitToDec (char value[], int oldBase ) //converting to the decimal system
{
	int length=strlen(value), result=0;

	for (int i=0; i&lt;length; i++)
	{
		if (value[i] &gt;= '0' &amp;&amp; value[i] &lt;= '9'  )
			result=(exp(oldBase,(length-i-1)))*((value[i]-'0')+result);

		else if (value[i] &gt;= 'a' &amp;&amp; value[i] &lt;= 'z')
			result=exp(oldBase,(length-i-1))*(value[i]-'a'+10)+result;

		else if (value[i] &gt;='A' &amp;&amp; value[i] &lt;='Z')
			result=exp(oldBase,(length-i-1))*(value[i]-'A'+10)+result;

	}

	return result;
}

// converting from the decimal to an arbitrary system
int decToArbit (int value, int newBase )

{ int tempVal[32], newLength=0;

	for (int i=0;tempVal!=0;i++)
	{
	tempVal[i]=value%newBase;
	value=value/newBase;
	newLength++;

	}

	for(int i=0;i&lt;newLength;i++)
	{

	cout &lt;&lt; tempVal[i]; 
	}
	return 0;
}

void main ()
{	char value[32];
	int oldBase=0, newBase, valueInDec=arbitToDec(value, oldBase);

	cout &lt;&lt; endl &lt;&lt; &quot;Please, enter a Number that you want to convert in a base ranging from 2 to 36!&quot; &lt;&lt; endl;
	cin &gt;&gt; value;

	cout &lt;&lt; &quot;What is the base of this number?&quot; &lt;&lt; endl;
	cin &gt;&gt; oldBase;

	cout &lt;&lt; &quot;In what base should your number be converted? Please, choose a base ranging from 2 to 36!&quot; &lt;&lt; endl;
	cin &gt;&gt; newBase;

	cout &lt;&lt; &quot;The number  &quot; &lt;&lt; value &lt;&lt; &quot;  in the base  &quot; &lt;&lt; oldBase &lt;&lt; &quot;  is  &quot; &lt;&lt; decToArbit(valueInDec, newBase) &lt;&lt; &quot;  in base  &quot; &lt;&lt; newBase &lt;&lt; endl;

	//arbitToDec(value.c_str(), oldBase)

	system(&quot;pause&quot;);

	//return 0;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1838315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838315</guid><dc:creator><![CDATA[JP001]]></dc:creator><pubDate>Wed, 13 Jan 2010 17:40:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlensystem - Basis konvertieren on Wed, 13 Jan 2010 17:51:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">valueInDec=arbitToDec(value, oldBase);
</code></pre>
<p>value zeigt an der Stelle auf uninitialisierten Speicher. Deshalb passiert etwas undefiniertes, z.B. ein Absturz.</p>
<p>Dies zu behben wird dein jetziges Problem lösen. Und dich vermutlich direkt zum nächsten Problem bringen, denn der Code sieht dermaßen unsauber aus, dass ich mir nicht vorstellen kann, dass er funktioniert. Du solltest versuchen, alles nochmal gründlich zu überarbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838323</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 13 Jan 2010 17:51:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlensystem - Basis konvertieren on Wed, 13 Jan 2010 18:27:25 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">valueInDec=arbitToDec(value, oldBase);
</code></pre>
<p>value zeigt an der Stelle auf uninitialisierten Speicher. Deshalb passiert etwas undefiniertes, z.B. ein Absturz.</p>
<p>Dies zu behben wird dein jetziges Problem lösen. Und dich vermutlich direkt zum nächsten Problem bringen, denn der Code sieht dermaßen unsauber aus, dass ich mir nicht vorstellen kann, dass er funktioniert. Du solltest versuchen, alles nochmal gründlich zu überarbeiten.</p>
</blockquote>
<p>Vielen Dank für die Antwort. Aber habe ich das nicht in genau der Zeile dadrüber mit ( char value [32] ) gemacht? war zumindest mein vorhaben <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>Dass das alles noch so unsauber ist stimmt natürlich, ich wollts erstmal zum laufen bringen und denn aufräumen.</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838351</guid><dc:creator><![CDATA[JP001]]></dc:creator><pubDate>Wed, 13 Jan 2010 18:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlensystem - Basis konvertieren on Wed, 13 Jan 2010 18:43:38 GMT]]></title><description><![CDATA[<p>JP001 schrieb:</p>
<blockquote>
<p>Vielen Dank für die Antwort. Aber habe ich das nicht in genau der Zeile dadrüber mit ( char value [32] ) gemacht? war zumindest mein vorhaben <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>
</blockquote>
<p>In der Zeile davor steht, was value für ein Typ ist und es wird Speicherbereich für value reserviert. Aber in diesem Speicherbereich steht irgendwas. Zumindest kein nullterminierter CString wie es deine Funktion erwartet.</p>
<p>Du könntest übrigens statt des char Arrays lieber std::string benutzen. Dein Programm wird dadurch flexibler und du musst auf weniger Fehlerquellen wie diese achten (eigentlich auf gar keine mehr). Dafür musst du natürlich ein paar Sachen umschreiben aber ich wage mal vorherzusehen, dass die vieles sowieso noch mal neu schreiben musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838367</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 13 Jan 2010 18:43:38 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlensystem - Basis konvertieren on Thu, 14 Jan 2010 18:14:27 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab nur mal fix meine alten Sources durch gesehen, weil ich das auch mal fgemacht hatte, hier ein knapper Ausschnitt:</p>
<pre><code class="language-cpp">typedef enum {

	BIN =  2,
	OCT =  8,
	DEC = 10,
	HEX = 16

} BASE;

// Converter
int converter( char *szBuffer, const int iSize, unsigned long ulValue, BASE base ) {	

const char cDigits[ ] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
						  'A', 'B', 'C', 'D', 'E', 'F' };         
	// Clear buffer
	for( int i = 0; i &lt; iSize; i++ )
		szBuffer[ i ] = 0;

	// Indexposition
	int iIndex = iSize - 1;

	szBuffer[ iIndex-- ] = '\0';

	do {

		szBuffer[ iIndex-- ] = cDigits[ (ulValue % base) ];

		ulValue /= base;

	} while( ulValue &gt; 0 );

	return iIndex + 1;
}
</code></pre>
<p>Hoffe es hilft.</p>
<p>[EDIT]:</p>
<p>Achja noch als Bemerkung, die umgerechnete Zahle in das jeweilige System, wird im Buffer von der letzten Zelle nach vorn geschrieben, der Returnwert, liefert also den Index des ersten Wertes im Buffer.</p>
<p>Lg Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1838959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1838959</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Thu, 14 Jan 2010 18:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlensystem - Basis konvertieren on Fri, 15 Jan 2010 16:47:38 GMT]]></title><description><![CDATA[<p>Vielen Dank tobi!<br />
Ein bisschen hilfts, aber ich glaub du hast da ein paar dinge eingebaut, von denen ich noch nie was gehört habe. Ich hab mich nochmal rangesetzt und versucht die Fehler zu korrigieren.<br />
So, wie es im Moment ist, gibt es beim kompilieren keine fehler, jedoch beim verlinken:</p>
<p>error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;class std::basic_string&lt;char,struct std::char_traits&lt;char&gt;,class std::allocator&lt;char&gt; &gt; __cdecl outstring(char)&quot; (?outstring@@YA?AV?<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>b</mi><mi>a</mi><mi>s</mi><mi>i</mi><mi>c</mi><mi mathvariant="normal">_</mi><mi>s</mi><mi>t</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>g</mi><mi mathvariant="normal">@</mi><mi>D</mi><mi>U</mi><mo>?</mo></mrow><annotation encoding="application/x-tex">basic\_string@DU?</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:1.00444em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit">b</span><span class="mord mathit">a</span><span class="mord mathit">s</span><span class="mord mathit">i</span><span class="mord mathit">c</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathit">s</span><span class="mord mathit">t</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mathrm">@</span><span class="mord mathit" style="margin-right:0.02778em;">D</span><span class="mord mathit" style="margin-right:0.10903em;">U</span><span class="mclose">?</span></span></span></span>char_traits@D@std@@V?$allocator@D@2@@std@@D@Z)&quot; in Funktion &quot;&quot;void __cdecl decToArbit(int,int)&quot; (?decToArbit@@YAXHH@Z)&quot;.</p>
<p>fatal error LNK1120: 1 nicht aufgelöste externe Verweise.</p>
<p>Hier ist mein aktueller Code</p>
<pre><code class="language-cpp">[code]
#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

void exeSysChange(char value[], int oldBase, int newBase);
void error(char value[], int oldBase, int newBase);
int exp(int base, int exponent);
int arbitToDec(char value[], int oldBase);
void decToArbit(int value, int newBase);
//void out(char value[], int newBase);
void main()
{
int oldBase=0, newBase=0;
char value[32];

	cout &lt;&lt; endl &lt;&lt; &quot;Please, enter a Number that you want to convert in a base ranging from 2 to 36!&quot; &lt;&lt; endl;
	cin &gt;&gt; value;

	cout &lt;&lt; &quot;What is the base of this number?&quot; &lt;&lt; endl;
	cin &gt;&gt; oldBase;

	cout &lt;&lt; &quot;In what base should your number be converted? Please, choose a base ranging from 2 to 36!&quot; &lt;&lt; endl;
	cin &gt;&gt; newBase;

	error(value, oldBase, newBase);
	//exeSysChange(value, oldBase, newBase);

}
void error(char value[], int oldBase, int newBase)
{	int i=0;

	if (value[i]-'0'&gt;=oldBase || value[i]-'a'+10&gt;=oldBase || value[i]-'A'+10&gt;=oldBase )
		{
		cout &lt;&lt; &quot;wrong input! At least one digit of the input is too large for base!&quot; &lt;&lt; endl;
		main();
		}
	else if (oldBase&lt;2 || oldBase&gt;36 || newBase&lt;2 || oldBase&gt;36)
		{
		cout &lt;&lt; &quot;wrong input! Permissable bases range from 2 to 36 !&quot; &lt;&lt; endl;
		main();
		}
	else
		{
		exeSysChange(value, oldBase, newBase);
		}

}
void exeSysChange(char value[], int oldBase, int newBase)
{
	int valueInDec=arbitToDec(value, oldBase);
	//char newValue[32];
cout &lt;&lt; &quot;zwischenergebnis:  &quot; &lt;&lt; valueInDec &lt;&lt; endl;
system(&quot;pause&quot;);
	decToArbit(valueInDec, newBase);
	//out(newValue, newBase);

}
int exp(int base,int exponent) 
{ int result,i;
	if(exponent==0)
		result=1;

	else if (exponent=1)
		result=base;

	for(i=1;i&lt;exponent;i++)
		{
		  result=base*result;
		}
	return result;
} 
int arbitToDec(char value[], int oldBase ) //converting to the decimal system
{
	int length=strlen(value), result=0, i=0;	

	for (int i=0; i&lt;length; i++)
		{
			if (value[i] &gt;= '0' &amp;&amp; value[i] &lt;= '9'  )
				result=(exp(oldBase,(length-i-1)))*((value[i]-'0')+result);

			else if (value[i] &gt;= 'a' &amp;&amp; value[i] &lt;= 'z')
				result=exp(oldBase,(length-i-1))*(value[i]-'a'+10)+result;

			else if (value[i] &gt;='A' &amp;&amp; value[i] &lt;='Z')
				result=exp(oldBase,(length-i-1))*(value[i]-'A'+10)+result;
		}
	return result;
}
void decToArbit(int value, int newBase )

{ int tempVal[32], newLength=0;

	for (int i=0;tempVal!=0;i++)
		{
		tempVal[i]=value%newBase;
		value=value/newBase;
		newLength++;
		}

	for(int i=0;i&lt;newLength;i++)
		{
		string outstring(char(tempVal));
		cout &lt;&lt; &quot;The number in &quot; &lt;&lt; newBase &lt;&lt; &quot;is&quot; &lt;&lt; outstring &lt;&lt; endl;
		//cout &lt;&lt; char(tempVal[i]);

		}

}
</code></pre>
<p>[/code]</p>
<p>Vielleicht hat ja noch jemand einen Ratschlag, das wäre nett.<br />
an der stelle</p>
<pre><code class="language-cpp">[code]
cout &lt;&lt; &quot;zwischenergebnis:  &quot; &lt;&lt; valueInDec &lt;&lt; endl;
system(&quot;pause&quot;);
</code></pre>
<p>[/code]</p>
<p>Wollte ich mal schaun, ob wenigstens die umrechnung ins dezimalsystem geklappt hat. Doch davor kommt wie gesagt der Fehler beim verlinken...</p>
<p>Lieben Gruß<br />
JP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1839418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1839418</guid><dc:creator><![CDATA[JP001]]></dc:creator><pubDate>Fri, 15 Jan 2010 16:47:38 GMT</pubDate></item></channel></rss>