<?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[Knobelaufgabe]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich hatte schon einmal hier gepostet, möchte das Problem allerdings komplett neu und mit mehr Hintergrund vorstellen. Nicht abschrecken lassen, ich glaube für einige hier ist das Kinderkram.</p>
<p>Ich schreibe aus Interesse an einem Parser. Für entsprechende Daten existieren bereits Parser, die ich zum Testen als Vergleich heranziehe.</p>
<p><strong>Fakten:</strong></p>
<ul>
<li>Ich gehe davon aus, dass die existierenden Parser funktionieren, da sich die berechneten Ergebnisse untereinander decken.</li>
<li>Mein Parser parst sämtliche Informationen korrekt bis auf Positionsdaten (Längen- und Breitengrad)</li>
<li>Die Positionsdaten werden jedoch 100%ig korrekt extrahiert, weil es sich um eine fortlaufende Bitfolge handelt und alle nachfolgenden Elemente korrekt extrahiert werden</li>
</ul>
<p><strong>Beispiel mit einer Nachricht A:</strong><br />
<strong>Parser 1 ermittelt:</strong></p>
<pre><code>NE Longitude             : -73.50°
 NE Latitude              :  45.55°
 SW Longitude             : -80.16°
 SW Latitude              :  42.33°
</code></pre>
<p><strong>Parser 2 ermittelt:</strong></p>
<pre><code>NE Longitude             : -44100
 NE Latitude              : 27330
 SW Longitude             : -48100
 SW Latitude              : 25400
</code></pre>
<p>Laut Doku handelt es sich bei den Feldern um Längen-/Breitengrad <strong>&quot;to 0.1 minutes&quot;</strong>. D.h. die Ergebnisse von Parser 2 sind identisch zu Parser 1. Beispiel für NE Longitude:</p>
<pre><code>NE Longitude: -44100 / 60 / 10 = -73.5°
</code></pre>
<p><strong>Mein qualitativ hochwertiger Parser ermittelt:</strong></p>
<pre><code>NE Longitude             : 218044
 NE Latitude              : 27330
 SW Longitude             : 214044
 SW Latitude              : 25400
</code></pre>
<p>Die Breitengrade stimmen also. Nur bei den Längengraden stimmt was nicht. Rechne ich um erhalte ich z.B. für NE Longitude:</p>
<pre><code>NE Longitude: 218044 / 60 / 10 = 363.41°
</code></pre>
<p>Wenn man sich jetzt folgendes Bild anschaut (das korrekte Ergebnis habe ich mit einem weißen Pfeil markiert): <a href="http://www.abload.de/img/unbenanntjvu04.png" rel="nofollow">http://www.abload.de/img/unbenanntjvu04.png</a></p>
<p>Dann tun sich bei mir zwei Fragen auf:</p>
<p>1.) Wieso ist der Winkel negativ?<br />
2.) Wo ist sind meine 363.41° angesiedelt und wie rechne ich das in 73.5° um?</p>
<p>Ich versteh das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313385/knobelaufgabe</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 05:57:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313385.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Jan 2013 13:35:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 13:35:30 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>ich hatte schon einmal hier gepostet, möchte das Problem allerdings komplett neu und mit mehr Hintergrund vorstellen. Nicht abschrecken lassen, ich glaube für einige hier ist das Kinderkram.</p>
<p>Ich schreibe aus Interesse an einem Parser. Für entsprechende Daten existieren bereits Parser, die ich zum Testen als Vergleich heranziehe.</p>
<p><strong>Fakten:</strong></p>
<ul>
<li>Ich gehe davon aus, dass die existierenden Parser funktionieren, da sich die berechneten Ergebnisse untereinander decken.</li>
<li>Mein Parser parst sämtliche Informationen korrekt bis auf Positionsdaten (Längen- und Breitengrad)</li>
<li>Die Positionsdaten werden jedoch 100%ig korrekt extrahiert, weil es sich um eine fortlaufende Bitfolge handelt und alle nachfolgenden Elemente korrekt extrahiert werden</li>
</ul>
<p><strong>Beispiel mit einer Nachricht A:</strong><br />
<strong>Parser 1 ermittelt:</strong></p>
<pre><code>NE Longitude             : -73.50°
 NE Latitude              :  45.55°
 SW Longitude             : -80.16°
 SW Latitude              :  42.33°
</code></pre>
<p><strong>Parser 2 ermittelt:</strong></p>
<pre><code>NE Longitude             : -44100
 NE Latitude              : 27330
 SW Longitude             : -48100
 SW Latitude              : 25400
</code></pre>
<p>Laut Doku handelt es sich bei den Feldern um Längen-/Breitengrad <strong>&quot;to 0.1 minutes&quot;</strong>. D.h. die Ergebnisse von Parser 2 sind identisch zu Parser 1. Beispiel für NE Longitude:</p>
<pre><code>NE Longitude: -44100 / 60 / 10 = -73.5°
</code></pre>
<p><strong>Mein qualitativ hochwertiger Parser ermittelt:</strong></p>
<pre><code>NE Longitude             : 218044
 NE Latitude              : 27330
 SW Longitude             : 214044
 SW Latitude              : 25400
</code></pre>
<p>Die Breitengrade stimmen also. Nur bei den Längengraden stimmt was nicht. Rechne ich um erhalte ich z.B. für NE Longitude:</p>
<pre><code>NE Longitude: 218044 / 60 / 10 = 363.41°
</code></pre>
<p>Wenn man sich jetzt folgendes Bild anschaut (das korrekte Ergebnis habe ich mit einem weißen Pfeil markiert): <a href="http://www.abload.de/img/unbenanntjvu04.png" rel="nofollow">http://www.abload.de/img/unbenanntjvu04.png</a></p>
<p>Dann tun sich bei mir zwei Fragen auf:</p>
<p>1.) Wieso ist der Winkel negativ?<br />
2.) Wo ist sind meine 363.41° angesiedelt und wie rechne ich das in 73.5° um?</p>
<p>Ich versteh das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294481</guid><dc:creator><![CDATA[ThisIsOurDestiny]]></dc:creator><pubDate>Tue, 29 Jan 2013 13:35:30 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 13:44:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Die Positionsdaten werden jedoch 100%ig korrekt extrahiert, weil es sich um eine fortlaufende Bitfolge handelt und alle nachfolgenden Elemente korrekt extrahiert werden</p>
</blockquote>
<p>Ach das glaube ich jetzt nicht.</p>
<p>Gib minimales Testbeispiel an!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294482</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 29 Jan 2013 13:44:07 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 13:43:45 GMT]]></title><description><![CDATA[<p>Die Werte sind offenbar als Zweierkomplement codiert. Das musst du beim Parsen berücksichtigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294483</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 29 Jan 2013 13:43:45 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 13:44:00 GMT]]></title><description><![CDATA[<p>1.- Mh, also deine 363,41° liegen für mich ausserhalb jedes Verständnisses. Da es nur 360° &quot;gibt&quot;, fängt man ab 360° wieder bei 0 an zu rechnen (simpel ausgedrückt), durch eine Addition von 180, 90 oder 270 kommt man auch nichtmals in die Nähe des vermeintlich richtigen Ergebnisses.</p>
<p>2.- Was hat das mit C++ zu tun, ausser dass du es damit schreibst? Wenn ja, poste mal Quellcode oder wenigstens Pseudocode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294484</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 29 Jan 2013 13:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 13:48:22 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Die Positionsdaten werden jedoch 100%ig korrekt extrahiert, weil es sich um eine fortlaufende Bitfolge handelt und alle nachfolgenden Elemente korrekt extrahiert werden</p>
</blockquote>
<p>Ach ...</p>
</blockquote>
<p>Ich würde das gerne als Annahme betrachten. Die Nachrichten bestehen aus Bits und man fragt dann die einzelnen Felder ab:</p>
<pre><code>// [...]
channelA = getBits(12); // wandert intern 12 bits weiter
channelB = getBits(12); // wandert intern wieder 12 bits weiter
txrx= getBits(4);
power = getBits(1);
NE Longitude = getBits(18);
NE Latitude = getBits(17);
SW Longitude = getBits(18);
SW Latitude = getBits(17);
// [...]
</code></pre>
<p>(Wen es genauer interessiert: <a href="http://gpsd.berlios.de/AIVDM.html#_type_22_channel_management" rel="nofollow">http://gpsd.berlios.de/AIVDM.html#_type_22_channel_management</a> , da sind die Felder enthalten.)<br />
Und bei mir stimmen immer ALLE Felder bis auf die Werte in Longitude. Die werden wohl ganz besonders umgerechnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294489</guid><dc:creator><![CDATA[ThisIsOurDestiny]]></dc:creator><pubDate>Tue, 29 Jan 2013 13:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 13:50:42 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Die Werte sind offenbar als Zweierkomplement codiert. Das musst du beim Parsen berücksichtigen.</p>
</blockquote>
<p>D.h. ich muss alle bits einmal kippen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294490</guid><dc:creator><![CDATA[ThisIsOurDestiny]]></dc:creator><pubDate>Tue, 29 Jan 2013 13:50:42 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 13:54:34 GMT]]></title><description><![CDATA[<p>ThisIsOurDestiny schrieb:</p>
<blockquote>
<p>D.h. ich muss alle bits einmal kippen?</p>
</blockquote>
<p>Sind wir in der Ratestunde?</p>
<p><a href="http://de.wikipedia.org/wiki/Zweierkomplement" rel="nofollow">http://de.wikipedia.org/wiki/Zweierkomplement</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294492</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 29 Jan 2013 13:54:34 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:07:06 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>ThisIsOurDestiny schrieb:</p>
<blockquote>
<p>D.h. ich muss alle bits einmal kippen?</p>
</blockquote>
<p>Sind wir in der Ratestunde?</p>
<p><a href="http://de.wikipedia.org/wiki/Zweierkomplement" rel="nofollow">http://de.wikipedia.org/wiki/Zweierkomplement</a></p>
</blockquote>
<p>Ok ok ich gebe mir Mühe:</p>
<blockquote>
<p>Bei der Codierung in der Zweierkomplementdarstellung ist dagegen die explizite Unterscheidung zwischen einem ausgezeichneten Vorzeichenbit und den Bits, die den Betrag beschreiben, nicht notwendig. Negative Zahlen sind daran zu erkennen, dass das höchstwertige Bit den Wert 1 hat.</p>
</blockquote>
<p>218044 wird laut Protokoll in eine 18 Bit Variable gesteckt.<br />
Binär sieht der Wert so aus:</p>
<p>11 0101 0011 1011 1100 (MSB links)</p>
<p>Das Vorzeichenbit ist 1, die Zahl ist also eine negative Zahl. Das prüfe ich wie folgt:</p>
<pre><code>if(m_NE_Longitude &amp; 0x20000) {
     m_NE_Longitude &amp;= 0x1FFFF; // Alle bits nach dem Minuszeichen holen
}
</code></pre>
<p>Jetzt komme ich nicht weiter. Ich bin immer noch weit vom Ergebnis entfernt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294495</guid><dc:creator><![CDATA[ThisIsOurDestiny]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:07:06 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:13:51 GMT]]></title><description><![CDATA[<p>Wenn das MSB gesetzt ist, musst du einfach nur 2^18 abziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294496</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:23:36 GMT]]></title><description><![CDATA[<p>Nanu...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294500</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:24:11 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Das tut nicht. Man muss die &quot;eingeschobenen&quot; Bits auf 1 setzen. Außerdem muss m_NE_Longitude 32 Bit groß sein.</p>
</blockquote>
<p>Jup, hab's gerade gelöscht, als ich die Bits noch einschoeben wollte, hab ich aber Deine Lösung gesehen, die viel hübscher ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294502</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:27:31 GMT]]></title><description><![CDATA[<p>Okay hier wurde wohl gelöscht... also erstmal trotzdem danke an Mfk und Volkhard die sich hier echt Mühe geben!</p>
<p>Trotzdem raffe ich das nicht ganz.</p>
<pre><code>long m_NE_Longitude1 = six.getBits(18);

		if(m_NE_Longitude1 &amp; 0x20000) {
			m_NE_Longitude1 -= 0x40000;	
			cout&lt;&lt;m_NE_Longitude1&lt;&lt;endl;
		}
</code></pre>
<p>Also was hier passiert: Irgendwo in der Doku wird stehen, dass die Longitude als Zweierkomplement gespeichert wird. Das habe ich erstmal überlesen.</p>
<p>Also prüfen wir, ob die Longitude positiv oder negativ ist, indem wir das MSB betrachten.</p>
<p>Falls sie negativ ist, ziehen wir 2^18 ab. Hier meine Frage: Warum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294504</guid><dc:creator><![CDATA[ThisIsOurDestiny]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:28:42 GMT]]></title><description><![CDATA[<p>Mal so nebenbei, die Lösung ist richtig, ich verstehe nur den Part mit 2^18 nicht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294506</guid><dc:creator><![CDATA[ThisIsOurDestiny]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:35:39 GMT]]></title><description><![CDATA[<p>ThisIsOurDestiny schrieb:</p>
<blockquote>
<p>Falls sie negativ ist, ziehen wir 2^18 ab. Hier meine Frage: Warum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Weil das Zweierkomplement so funktioniert.</p>
<p>Mit 18 Bits kannst du (ohne Vorzeichen) Werte von 0 bis 262143 darstellen.</p>
<p>Für das Zweierkomplement nimmst du jetzt die obere Hälfte dieser Werte (131072 bis 262143, das sind genau die, bei denen das MSB 1 ist) und deutest sie um auf -131072 bis -1. Diese Werte sind also alle um genau 262144 verschoben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294508</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to Knobelaufgabe on Tue, 29 Jan 2013 14:44:46 GMT]]></title><description><![CDATA[<p>Ok ich hab's verstanden. Was soll ich sagen, danke an euch, erstens habe ich wieder was gelernt (Doku korrekt lesen, Two's Complement) und zweitens hat das Forum hier mal wieder gezeigt, dass hier viele schlaue Köpfe unterwegs sind, die helfen, wenn man mal nicht weiterweiß <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2294509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2294509</guid><dc:creator><![CDATA[ThisIsOurDestiny]]></dc:creator><pubDate>Tue, 29 Jan 2013 14:44:46 GMT</pubDate></item></channel></rss>