{"id":47,"date":"2017-04-02T21:59:25","date_gmt":"2017-04-02T21:59:25","guid":{"rendered":"http:\/\/www.derhecht.de\/content\/?p=47"},"modified":"2017-04-09T21:22:33","modified_gmt":"2017-04-09T21:22:33","slug":"bit-in-einen-byte-testen","status":"publish","type":"post","link":"https:\/\/www.derhecht.de\/content\/bit-in-einen-byte-testen\/","title":{"rendered":"Bit in einen Byte testen"},"content":{"rendered":"<p>Manchmal ist es n\u00f6tig ein Bit in einen Byte oder Word zu pr\u00fcfen ob gesetzt oder nicht. f\u00fcr diesen Zweck gibt es verschiedene Ans\u00e4tze die ich nachfolgend aufzeichnen m\u00f6chte.<\/p>\n<p>eine Variante ist inline den Wert mit Bitoperationen zu pr\u00fcfen<\/p>\n<pre><code class=\"c++\">\/\/Bitnummer 3 testen\r\nint x = 0x9;         \/\/ Bitmuster 0000 1001\r\n\r\nif((x &amp; 0x8) &gt; 0)    \/\/ TRUE weil 0x8 -&gt; 0000 1000<\/code><\/pre>\n<p>eine weitere Variante ist das erstellen einer WinCC Funktion. Das Ergebnis einer Schiebe-Operation ist in der Regel ein int. Deshalb auch der Cast in ein BYTE um die Compiler-Warnungen zu unterbinden.<\/p>\n<pre><code class=\"c++\">BOOL GetBit(BYTE data, BYTE bit)\r\n{\r\n   BYTE pattern = (BYTE)(0x1 &lt;&lt; bit);\r\n   if((data &amp; pattern) &gt; 0)\r\n     return TRUE;\r\n   return FALSE;\r\n}<\/code><\/pre>\n<p>Das gleiche Beispiel wie oben bei Verwendung der Funktion GetBit. So ist das meines Erachtens lesbarer.<\/p>\n<pre><code class=\"c++\">\/\/Bitnummer 3 testen\r\nint x = 0x9;         \/\/ Bitmuster 0000 1001\r\n\r\nif(GetBit(x, 3))    \/\/ TRUE weil 0x8 -&gt; 0000 1000<\/code><\/pre>\n<p>Die Funktion GetBit kann auch f\u00fcr ein\u00a0WORD oder DWORD abge\u00e4ndert werden. Zu beachten ist dann dass die Bitnummern nur dann verwendet werden k\u00f6nnen wenn die Variablen auch SPS-seitig so definiert sind. Sind das hingegen \u00a0SPS-seitig nur einzelne Bits muss die Bytereichenfolge beachtet werden.<\/p>\n<p>noch ein Beispiel:<\/p>\n<p>Variable\u00a0vom Type\u00a0WORD -&gt; MW10 (SPS-Seitig Ab M10.0\u00a0bis M11.7 16 einzelne Bits)<br \/>\nsoll das Bit M10.0 getestet werden muss die Bitnummer 8 verwendet werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal ist es n\u00f6tig ein Bit in einen Byte oder Word zu pr\u00fcfen ob gesetzt oder nicht. f\u00fcr diesen Zweck gibt es verschiedene Ans\u00e4tze die ich nachfolgend aufzeichnen m\u00f6chte. eine Variante ist inline den Wert mit Bitoperationen zu pr\u00fcfen \/\/Bitnummer 3 testen int x = 0x9; \/\/ Bitmuster 0000 1001 if((x &amp; 0x8) &gt; 0) [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[12,11],"class_list":["post-47","post","type-post","status-publish","format-standard","hentry","category-wincc-c-script","tag-bitmaske","tag-getbit"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts\/47","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":7,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts\/47\/revisions"}],"predecessor-version":[{"id":58,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/posts\/47\/revisions\/58"}],"wp:attachment":[{"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/media?parent=47"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/categories?post=47"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.derhecht.de\/content\/wp-json\/wp\/v2\/tags?post=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}