<?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[hex einlesen und abspeichern]]></title><description><![CDATA[<p>hi,</p>
<p>ich habe einen hex string von ner datei. den will ich erst mal in ein struktur geben dann modifizieren und wieder speicher. da die daten hex sind muss ich sie erst mal einlesen und ind dez wandeln und auch noch swappen für big/little endian</p>
<p>in meinem fall hab ich zb parameter, paddingbyte_0, voltage_max, voltage_min...<br />
wie bring ich die recht simple in die data_dec struktur? ich muss sie dann halt auch wieder in hex umwandeln und speichern in die datei! kann man das einfacher machen als ich?^^</p>
<pre><code class="language-cpp">struct data_hex
{
	string parameter; // 1 byte
	string paddingbyte_0; // 1 byte
	string voltage_max; // 2 byte
	string voltage_min; // 2 byte
}data_hex;

struct data_dec
{
	unsigned char parameter;
	unsigned char paddingbyte_0;
	unsigned short voltage_max;
	unsigned short voltage_min;
}data_dec;

char xtod(char c) 
{
 if (c&gt;='0' &amp;&amp; c&lt;='9') return c-'0';
 if (c&gt;='A' &amp;&amp; c&lt;='F') return c-'A'+10;
 if (c&gt;='a' &amp;&amp; c&lt;='f') return c-'a'+10;
 return c=0;        // not Hex digit
}

int HextoDec(char *hex, int l)
{
    if (*hex==0) return(l);
    return HextoDec(hex+1, l*16+xtod(*hex)); // hex+1?
}

int xstrtoi(char *hex)    // hex string to integer
{
    return HextoDec(hex,0);
}

int main()
{
data_hex data_hex;
data_dec data_dec;
string str;

string line = &quot;01008D03C201&quot;; // aus datei eingelesen

data_hex.parameter = line.sub_str(0, 2);
data_hex.paddinbyte_0 = line.sub_str(2, 2);
data_hex.volatage_max = line.sub_str(4, 4);
data_hex.volatage_max.append(data_hex.volatage_max.substr(0, 2)); // swap big little endian
data_hex.volatage_max.erase(0, 2); // swap big little endian
data_hex.volatage_min = line.sub_str(8, 4);
data_hex.volatage_min.append(data_hex.volatage_min.substr(0, 2)); // swap big little endian
data_hex.volatage_min.erase(0, 2); // swap big little endian

data_dec.parameter = xstrtoi(data_hex.parameter);
data_dec.paddinbyte_0 = xstrtoi(data_hex.paddinbyte_0);
data_dec.volatage_max = xstrtoi(data_hex.volatage_max);
data_dec.volatage_min = xstrtoi(data_hex.volatage_min);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/219362/hex-einlesen-und-abspeichern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 07:57:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219362.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Aug 2008 22:49:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to hex einlesen und abspeichern on Fri, 01 Aug 2008 22:49:55 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich habe einen hex string von ner datei. den will ich erst mal in ein struktur geben dann modifizieren und wieder speicher. da die daten hex sind muss ich sie erst mal einlesen und ind dez wandeln und auch noch swappen für big/little endian</p>
<p>in meinem fall hab ich zb parameter, paddingbyte_0, voltage_max, voltage_min...<br />
wie bring ich die recht simple in die data_dec struktur? ich muss sie dann halt auch wieder in hex umwandeln und speichern in die datei! kann man das einfacher machen als ich?^^</p>
<pre><code class="language-cpp">struct data_hex
{
	string parameter; // 1 byte
	string paddingbyte_0; // 1 byte
	string voltage_max; // 2 byte
	string voltage_min; // 2 byte
}data_hex;

struct data_dec
{
	unsigned char parameter;
	unsigned char paddingbyte_0;
	unsigned short voltage_max;
	unsigned short voltage_min;
}data_dec;

char xtod(char c) 
{
 if (c&gt;='0' &amp;&amp; c&lt;='9') return c-'0';
 if (c&gt;='A' &amp;&amp; c&lt;='F') return c-'A'+10;
 if (c&gt;='a' &amp;&amp; c&lt;='f') return c-'a'+10;
 return c=0;        // not Hex digit
}

int HextoDec(char *hex, int l)
{
    if (*hex==0) return(l);
    return HextoDec(hex+1, l*16+xtod(*hex)); // hex+1?
}

int xstrtoi(char *hex)    // hex string to integer
{
    return HextoDec(hex,0);
}

int main()
{
data_hex data_hex;
data_dec data_dec;
string str;

string line = &quot;01008D03C201&quot;; // aus datei eingelesen

data_hex.parameter = line.sub_str(0, 2);
data_hex.paddinbyte_0 = line.sub_str(2, 2);
data_hex.volatage_max = line.sub_str(4, 4);
data_hex.volatage_max.append(data_hex.volatage_max.substr(0, 2)); // swap big little endian
data_hex.volatage_max.erase(0, 2); // swap big little endian
data_hex.volatage_min = line.sub_str(8, 4);
data_hex.volatage_min.append(data_hex.volatage_min.substr(0, 2)); // swap big little endian
data_hex.volatage_min.erase(0, 2); // swap big little endian

data_dec.parameter = xstrtoi(data_hex.parameter);
data_dec.paddinbyte_0 = xstrtoi(data_hex.paddinbyte_0);
data_dec.volatage_max = xstrtoi(data_hex.volatage_max);
data_dec.volatage_min = xstrtoi(data_hex.volatage_min);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1557870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557870</guid><dc:creator><![CDATA[julian1]]></dc:creator><pubDate>Fri, 01 Aug 2008 22:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 06:40:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iomanip&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;

int main() {
	std::stringstream stream(&quot;0f&quot;);
	int i;
	stream &gt;&gt; std::hex &gt;&gt; i;

	std::ofstream file(&quot;C:\\name.txt&quot;);
	file &lt;&lt; std::hex &lt;&lt; std::setw(2) &lt;&lt; std::setfill('0') &lt;&lt; i;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1557898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1557898</guid><dc:creator><![CDATA[soinetwa]]></dc:creator><pubDate>Sat, 02 Aug 2008 06:40:23 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 12:18:44 GMT]]></title><description><![CDATA[<p>bei:</p>
<pre><code class="language-cpp">stringstream str;
str &lt;&lt; &quot;0500&quot;;
str &gt;&gt; std::hex &gt;&gt; integer_value;
</code></pre>
<p>das klappt nicht, warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558026</guid><dc:creator><![CDATA[julian1]]></dc:creator><pubDate>Sat, 02 Aug 2008 12:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 12:23:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">str &lt;&lt; &quot;05&quot;; 
str &gt;&gt; std::hex &gt;&gt; char_value;
</code></pre>
<p>da kommt dann char_value == 48 warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558027</guid><dc:creator><![CDATA[julian1]]></dc:creator><pubDate>Sat, 02 Aug 2008 12:23:20 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 13:03:05 GMT]]></title><description><![CDATA[<p>julian1 schrieb:</p>
<blockquote>
<p>bei:</p>
<pre><code class="language-cpp">stringstream str;
str &lt;&lt; &quot;0500&quot;;
str &gt;&gt; std::hex &gt;&gt; integer_value;
</code></pre>
<p>das klappt nicht, warum?</p>
</blockquote>
<p>Was klappt nicht?<br />
Was kommt raus und was erwartest du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558036</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 02 Aug 2008 13:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 13:04:06 GMT]]></title><description><![CDATA[<p>julian1 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">str &lt;&lt; &quot;05&quot;; 
str &gt;&gt; std::hex &gt;&gt; char_value;
</code></pre>
<p>da kommt dann char_value == 48 warum?</p>
</blockquote>
<p>Weil er char als zeichen interpretiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558038</guid><dc:creator><![CDATA[NordSüdSeite]]></dc:creator><pubDate>Sat, 02 Aug 2008 13:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 13:26:33 GMT]]></title><description><![CDATA[<p>will aber 5 in char_value haben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558046</guid><dc:creator><![CDATA[justin1]]></dc:creator><pubDate>Sat, 02 Aug 2008 13:26:33 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 13:40:24 GMT]]></title><description><![CDATA[<p>justin1 schrieb:</p>
<blockquote>
<p>will aber 5 in char_value haben!</p>
</blockquote>
<pre><code class="language-cpp">std::stringstream str(&quot;5&quot;);
char v;
str &gt;&gt; v;
</code></pre>
<p>Wenn du &quot;05&quot; hast, wird hald zuerst nur ein Zeichen gelesen, also 0, und das ist als Dezimal 48. (ASCII).</p>
<p>Dann hast du 5 als Zeichen in v und kannst es ausgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558052</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 02 Aug 2008 13:40:24 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 13:51:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">str &lt;&lt; &quot;05&quot;;
str &gt;&gt; std::hex &gt;&gt; char_value;
char_value = (int)char_value; //?????
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1558058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558058</guid><dc:creator><![CDATA[julian1]]></dc:creator><pubDate>Sat, 02 Aug 2008 13:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 13:56:10 GMT]]></title><description><![CDATA[<p>julian1 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">str &lt;&lt; &quot;05&quot;;
str &gt;&gt; std::hex &gt;&gt; char_value;
char_value = (int)char_value; //?????
</code></pre>
</blockquote>
<p>Erklär bitte mal genau, was du willst. Uns ist schon klar, was da passiert, aber dir anscheinend nicht, also sag mal, was du denkst, dass da kommen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558060</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 02 Aug 2008 13:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 14:27:11 GMT]]></title><description><![CDATA[<p>ich lese einen hex wert ein und gebe in in eine struktur...den wert der struktur schreibe ich in eine textbox hinein!</p>
<p>wenn ich nun &quot;05&quot; einlese als hex will ich die char value befüllen...und die value der textbox zuweisen...dort soll halt dann 5 als dez stehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558065</guid><dc:creator><![CDATA[julian1]]></dc:creator><pubDate>Sat, 02 Aug 2008 14:27:11 GMT</pubDate></item><item><title><![CDATA[Reply to hex einlesen und abspeichern on Sat, 02 Aug 2008 14:34:11 GMT]]></title><description><![CDATA[<p>Dann ist aber ein char der falsche Datentyp dafür.</p>
<p>Liest, wie oben beschrieben in einen integer ein und (falls nötig) kannst du den dan immernoch in einen string reinquetschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1558068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1558068</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 02 Aug 2008 14:34:11 GMT</pubDate></item></channel></rss>