<?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[ASCII-7 &amp;quot;String&amp;quot;]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>hab leider keinen besseren Titel gefunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ich bekomme von einem Messgerät einen char Buffer welche Text im ASCII-7 Format enthält.<br />
Gibt es irgendwelche fertige Funktionen (C oder C++) welche mir das ganze in einen 8Bit ASCII Format konvertiert?</p>
<p>Und damit es nicht so einfach ist, das ganze auch noch einmal anderst herum als ASCII-8 nach ASCII-7.</p>
<p>MfG Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304788/ascii-7-quot-string-quot</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 14:09:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304788.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Jun 2012 10:25:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ASCII-7 &amp;quot;String&amp;quot; on Thu, 14 Jun 2012 10:25:08 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>hab leider keinen besseren Titel gefunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ich bekomme von einem Messgerät einen char Buffer welche Text im ASCII-7 Format enthält.<br />
Gibt es irgendwelche fertige Funktionen (C oder C++) welche mir das ganze in einen 8Bit ASCII Format konvertiert?</p>
<p>Und damit es nicht so einfach ist, das ganze auch noch einmal anderst herum als ASCII-8 nach ASCII-7.</p>
<p>MfG Stephan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223052</guid><dc:creator><![CDATA[_Stephan_]]></dc:creator><pubDate>Thu, 14 Jun 2012 10:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to ASCII-7 &amp;quot;String&amp;quot; on Thu, 14 Jun 2012 11:00:25 GMT]]></title><description><![CDATA[<p>Was verstehst du denn unter ASCII-7 bzw ASCII-8?<br />
Gib mal ein Beispiel.</p>
<p>Falls du damit die Bits meinst, dann ist das egal, da ASCII sowieso nur für 7 Bit definiert ist.<br />
Und wenn die Übertragung Byte/Zeichenweise erfolgt brauchst du nichts machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223060</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Thu, 14 Jun 2012 11:00:25 GMT</pubDate></item><item><title><![CDATA[Reply to ASCII-7 &amp;quot;String&amp;quot; on Thu, 14 Jun 2012 11:06:33 GMT]]></title><description><![CDATA[<p>Ich gehe davon aus, daß Du dich auf üblicher PC-Hardware bewegst.<br />
ASCII ist nur sieben Bit breit. Im char ist das oberste Bit dann einfach Null. Wenn Du die Daten schon als char-Array geliefert bekommst, denke ich, daß dein OS/HW sich bereits drum kümmert, Du also nichts weiter beachten mußt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223063</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 14 Jun 2012 11:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to ASCII-7 &amp;quot;String&amp;quot; on Thu, 14 Jun 2012 11:17:33 GMT]]></title><description><![CDATA[<p>Also,<br />
- ASCII-7 7bit ASCII Zeichen<br />
- ASCII-8 8bit ASCII Zeichen</p>
<p>das Problem ist, daß ein Zeichen nur 7Bit lang ist und im 8. Bit des char schon ein Bit vom neuen Zeichen steht.</p>
<pre><code>Binär (steht auch so im Speicher):
1000001 1000010 1000011

entspricht als Zeichen
ABC
</code></pre>
<p>Es handelt sich hierbei um einen TEDs (IEEE 1451) Speicher (Konfigurationsdaten eines Sensors).</p>
<p>Ich hoffe es ist klar was ich meine, sonst bitte nochmals Fragen.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2223069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223069</guid><dc:creator><![CDATA[_Stephan_]]></dc:creator><pubDate>Thu, 14 Jun 2012 11:17:33 GMT</pubDate></item><item><title><![CDATA[Reply to ASCII-7 &amp;quot;String&amp;quot; on Thu, 14 Jun 2012 15:59:10 GMT]]></title><description><![CDATA[<p><em>Stephan</em> schrieb:</p>
<blockquote>
<p>und im 8. Bit des char schon ein Bit vom neuen Zeichen steht</p>
</blockquote>
<p>Das ist noch sehr unpräzise. Es ist <em>nicht</em> klar, wie die 7-Bit-Zeichen im char-Array kodiert sind.</p>
<pre><code>bit | 7 6 5 4 3 2 1 0
-------+----------------
byte 0 | ? ? ? ? ? ? ? ?
byte 1 | ? ? ? ? ? ? ? ?
byte 2 | ? ? ? ? ? ? ? ?
</code></pre>
<p>Wie stehen da jetzt die 7-Bit-Zeichen drin?!</p>
<p>most significant bit first:</p>
<pre><code>bit | 7 6 5 4 3 2 1 0
-------+----------------
byte 0 | 1 0 0 0 0 0 1|1
byte 1 | 0 0 0 0 1 0|1 0
byte 2 | 0 0 0 1 1|.....
</code></pre>
<p>least significant bit first:</p>
<pre><code>bit | 7 6 5 4 3 2 1 0
-------+----------------
byte 0 | 0|1 0 0 0 0 0 1
byte 1 | 1 1|1 0 0 0 0 1
byte 2 | .....|1 0 0 0 0
</code></pre>
<p>Dies sind hier nur mal die zwei naheliegensten Möglichkeiten.</p>
<p>Aber im Wesentlichen kannst du dir ein &quot;reader&quot;-Objekt nach folgendem Pseudo-Code bauen:</p>
<pre><code class="language-cpp">template&lt; class OctetInputIterator = unsigned char const* &gt;
class bit_reader
{
  OctetInputIterator oii;
  unsigned buffer_dat;
  unsigned buffer_len;

  void next_octet_to_buffer();

public:
  explicit bit_reader(OctetInputIterator oii)
  : oii(ooi), buffer_dat(0), buffer_len(0)
  {}

  unsigned long read(unsigned num_of_bits);
};

template&lt;class OctetInputIterator&gt;
unsigned long bit_reader&lt;OctetInputIterator&gt;::read(unsigned num_of_bits)
{
  unsigned long result = 0;
  while (num_of_bits) {
    if (buffer_len==0)
      next_octet_to_buffer();

    const unsigned block = min(num_of_bits,buffer_len);

    ...block Bits aus buffer nach result verschieben...

    num_of_bits -= block;
  }
  return result;
}

int main()
{
  unsigned char data[] = {...};
  bit_reader&lt;&gt; br (data);
  int a = br.read(7);
  int b = br.read(7);
  int c = br.read(7);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2223076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2223076</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 14 Jun 2012 15:59:10 GMT</pubDate></item></channel></rss>