User Tools

Site Tools


vba:cast:bitandbyte

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:cast:bitandbyte [30.04.2014 11:10:58]
yaslaw
vba:cast:bitandbyte [29.04.2015 11:15:38] (current)
yaslaw
Line 1: Line 1:
-====== [VBA] bitArray() char2byte() und byte2char()====== +====== [VBA] bitArray()char2byte() und byte2char()====== 
-Drei Funktionen im Umgang mit Bits. +//Drei Funktionen im Umgang mit Bits.//  
 + 
 +{{:​vba:​cast:​bitandbyte.bas|Download bitAndBytes.bas Version 1.0}} 
 + 
   - bitArray() zerlegt ein Zahl in ihre Bit-Teile. Ist also das Rekusive zu 1+2+4+8+...   - bitArray() zerlegt ein Zahl in ihre Bit-Teile. Ist also das Rekusive zu 1+2+4+8+...
   - Mit char2byte() kann man die Bit-Darstellung eines Zeichens ermitteln   - Mit char2byte() kann man die Bit-Darstellung eines Zeichens ermitteln
Line 6: Line 10:
  
  
- +=====Public Defintions===== 
-<code vb _byteProperties.bas> +====Enum byValueType==== 
-'​------------------------------------------------------------------------------- +<code vb>​Public Enum baValueType
-'​File ​        : bitArray +
-' ​              ​Copyright mpl by ERB software +
-' ​              ​http://​wiki.yaslaw.info/​dokuwiki/​doku.php/​vba/​functions/​byteArray +
-'​Environment ​ : VBA 2007 + +
-'​Version ​     : 1.0 +
-'​Author ​      : Stefan Erb (ERS) +
-'​History ​     : 29.04.2014 - ERS - Creation +
-'​------------------------------------------------------------------------------- +
-Option Explicit +
- +
-Public Enum baValueType+
     baBitPosition = 1       '​Der Array-Value beinhaltet die Bitpositionen von allen gesetzten Bit. Bei nicht gesezten Bits ist der Value false (also -1)     baBitPosition = 1       '​Der Array-Value beinhaltet die Bitpositionen von allen gesetzten Bit. Bei nicht gesezten Bits ist der Value false (also -1)
     baBit = 2               '​Gibt das Bit an der entsprechenden Position zurück. 0 oder 1     baBit = 2               '​Gibt das Bit an der entsprechenden Position zurück. 0 oder 1
     baValue = 3             '​Gibt den Wert des Bits zurück: 2^Bitposition     baValue = 3             '​Gibt den Wert des Bits zurück: 2^Bitposition
-End Enum+End Enum</​code>​
  
-Public Enum baBitCode+====Enum byBitCode==== 
 +<code vb>Public Enum baBitCode
     baDefault = 0           '​Bei Ziffern wird der BCD, bei allen anderen der ASCII verwendet     baDefault = 0           '​Bei Ziffern wird der BCD, bei allen anderen der ASCII verwendet
     baBCD4 = 1              'Im BCD-Code werden die Ziffern 0 bis 9 in vier Bits codiert. Dabei können die Zahlen von 0000 bis 1001 entstehen. Der BCD-Code wird auch als 8-4-2-1-Code bezeichnet.     baBCD4 = 1              'Im BCD-Code werden die Ziffern 0 bis 9 in vier Bits codiert. Dabei können die Zahlen von 0000 bis 1001 entstehen. Der BCD-Code wird auch als 8-4-2-1-Code bezeichnet.
                             'Wenn der Paramenter keine Nummer ist, wird der Fehler C_BITCODE_CAST_ERROR geworfen                             'Wenn der Paramenter keine Nummer ist, wird der Fehler C_BITCODE_CAST_ERROR geworfen
     baASCII = 2             '​Der American Standard Code for Information Interchange codiert alle Zeichen inklusive der englischen Sonderzeichen in sieben Bits. Insgesamt können mit dem ASCII-Code 128 ( \textstyle 2^7 ) verschiedene Zeichen codiert werden     baASCII = 2             '​Der American Standard Code for Information Interchange codiert alle Zeichen inklusive der englischen Sonderzeichen in sieben Bits. Insgesamt können mit dem ASCII-Code 128 ( \textstyle 2^7 ) verschiedene Zeichen codiert werden
-    baNA = 99 +End Enum</​code>​
-End Enum+
  
-Public Const C_BITCODE_CAST_ERROR = vbObjectError + 6000+====Konstanten==== 
 +<code vb>Public Const C_BITCODE_CAST_ERROR = vbObjectError + 6000</​code>​ 
 + 
 +=====bitArray()===== 
 +====Definition==== 
 +<code vb>​Public Function bitArray( _ 
 +        ByVal iNumber, _ 
 +        Optional ByVal iValueType As baValueType = baBit, _ 
 +        Optional ByVal iFilteredOut As Boolean = False _ 
 +) As Variant()</​code>​ 
 +  ***iNumber** Die Nummer, welche '​zerlegt'​ werden soll 
 +  ***iValueType** Art des Inhalt des Array. 
 +  ***iFilteredOut** Flag, ob alle 0er-Bit ausgefiltert werden sollen 
 +====Beispiele==== 
 +<code vb> 
 +'​example 1) Gib das Bitmuster zurück. Key = Bitposition,​ Value = Bit 
 +print_r bitArray(5) 
 +<​Variant()> ​ ( 
 +    [0] => <​Integer>​ 1 
 +    [1] => <​Integer>​ 0 
 +    [2] => <​Integer>​ 1 
 +
 + 
 +'​example 2) Gib die Werte zurück, mit denen bei Bitvergleichen gerehncet werden soll 
 +' ​   Key = Bitposition,​ Value = 2 ^ Bitposition,​ wenn der Bit gesetzt ist. Ansonsten 0 
 +print_r bitArray(5, baValue) 
 +<​Variant()> ​ ( 
 +    [0] => <​Long>​ 1 
 +    [1] => <​Boolean>​ False 
 +    [2] => <​Long>​ 4 
 +
 + 
 +'​example 3) Gib einfach ein Array aus, der die besetzten Bitpositionen zurückgint 
 +' ​          Key = Laufnummer, Value = Bitposition bei welcher det Bit 0 ist 
 +print_r bitArray(5, baBitPosition,​ True) 
 +<​Variant()> ​ ( 
 +    [0] => <​Long>​ 0 
 +    [1] => <​Long>​ 2 
 +
 +</​code>​ 
 + 
 +=====char2byte()===== 
 + 
 +====Definition==== 
 +<code vb> 
 +Public Function char2byte( 
 + ByVal iChar As Variant,  
 + Optional iBitCode As baBitCode = baDefault 
 +) As String 
 +</​code>​ 
 +  ***iChar** Charakter, der gewandelt werden soll. Null wird als 0 gewertet 
 +  ***iBitCode** Die Codierung. baAscii oder ba BCD 
 + 
 +====Beispiele==== 
 +<code vb> 
 +'​example 1) Byte einer Zahl. Zahlen sind tandart nach BCD-Codierung 
 +print_r getByte(9) 
 +<​String>​ '​1001'​ 
 + 
 +'​example 2) Dito, aber nach ASCII-Codierung 
 +print_r getByte(9, baASCII) 
 +<​String>​ '​10011100'​ 
 + 
 +'​example 3) String, Standart nach Ascii 
 +print_r getByte("​A"​) 
 +<​String>​ '​10000010'​ 
 + 
 +'​example 4) Null, Standart nach Ascii 
 +print_r getByte(Null,​ baBCD) 
 +<​String>​ '​00000000'​ 
 + 
 +'​example 5) Null nach BCD 
 +print_r getByte(Null) 
 +<​String>​ '​0000'​ 
 +</​code>​ 
 + 
 +=====byte2char()===== 
 + 
 +====Definition==== 
 +<​code>​Public Function byte2char(ByVal iByte As String) As Variant</​code>​ 
 +  ***iByte** Byte, das in ein Charakter gewandelt werden soll 
 + 
 +====Beispiele==== 
 +<code vb> 
 +'​example 1) Byte einer Zahl. Zahlen sind tandart nach BCD-Codierung 
 +print_r getChar("​1001"​) 
 +<​Integer>​ 9 
 + 
 +'​example 2) Dito, aber nach ASCII-Codierung 
 +print_r getChar("​10011100"​) 
 +<​String>​ '​9'​ 
 + 
 +'​example 3) String, Standart nach Ascii 
 +print_r getChar("​10000010"​) 
 +<​String>​ '​A'​ 
 + 
 +'​example 4) Null, Standart nach Ascii. Es kommt die Rückgabe von chr(NULL) zurück 
 +print_r getChar("​00000000"​) 
 +<​String>​ '​\u0000'​ 
 + 
 +'​example 5) Null nach BCD. Ist nciht mehr von 0 unterscheidbar 
 +print_r getChar("​0000"​) 
 +<​Integer>​ 0
 </​code>​ </​code>​
  
-<code vb _bitArray.bas>+=====Codes===== 
 +====Code bitArray()==== 
 +<code vb>
 '/** '/**
 ' * Zerlegt eine Nummer ihn ihre Bits. ' * Zerlegt eine Nummer ihn ihre Bits.
-' * @example 1) Gib das Bitmuster zurück. Key = Bitposition,​ Value = Bit 
-' *         ​print_r bitArray(5) 
-' *         <​Variant()> ​ ( 
-' *             [0] => <​Integer>​ 1 
-' *             [1] => <​Integer>​ 0 
-' *             [2] => <​Integer>​ 1 
-' *         ) 
-' * @example 2) Gib die Werte zurück, mit denen bei Bitvergleichen gerehncet werden soll 
-' *             Key = Bitposition,​ Value = 2 ^ Bitposition,​ wenn der Bit gesetzt ist. Ansonsten 0 
-' *         ​print_r bitArray(5, baValue) 
-' *         <​Variant()> ​ ( 
-' *             [0] => <​Long>​ 1 
-' *             [1] => <​Boolean>​ False 
-' *             [2] => <​Long>​ 4 
-' *         ) 
-' * @example 3) Gib einfach ein Array aus, der die besetzten Bitpositionen zurückgint 
-' *             Key = Laufnummer, Value = Bitposition bei welcher det Bit 0 ist 
-' *         ​print_r bitArray(5, baBitPosition,​ True) 
-' *         <​Variant()> ​ ( 
-' *             [0] => <​Long>​ 0 
-' *             [1] => <​Long>​ 2 
-' *         ) 
 ' * ' *
 ' * @param ​ Long        Die Nummer, welche '​zerlegt'​ werden soll ' * @param ​ Long        Die Nummer, welche '​zerlegt'​ werden soll
Line 98: Line 173:
     bitArray = retArray     bitArray = retArray
 End Function End Function
-<​code>​+</code>
  
-<code vb _char2byte.bas+====Code char2byte==== 
 +<code vb>
 '/** '/**
 ' * Gibt für einen Char das Byte aus ' * Gibt für einen Char das Byte aus
-' * 
-' * @example 1) Byte einer Zahl. Zahlen sind tandart nach BCD-Codierung 
-' *         ​print_r getByte(9) 
-' *         <​String>​ '​1001'​ 
-' * @example 2) Dito, aber nach ASCII-Codierung 
-' *         ​print_r getByte(9, baASCII) 
-' *         <​String>​ '​10011100'​ 
-' * @example 3) String, Standart nach Ascii 
-' *         ​print_r getByte("​A"​) 
-' *         <​String>​ '​10000010'​ 
-' * @example 4) Null, Standart nach Ascii 
-' *         ​print_r getByte(Null,​ baBCD) 
-' *         <​String>​ '​00000000'​ 
-' * @example 5) Null nach BCD 
-' *         ​print_r getByte(Null) 
-' *         <​String>​ '​0000'​ 
-' * 
 ' * @requiered ​ bitArray() ' * @requiered ​ bitArray()
 ' * ' *
Line 151: Line 210:
 </​code>​ </​code>​
  
-<code vb _char2byte.bas>+====Code byte2char== 
 +<code vb>
 '/** '/**
 ' * Umkehrfunktion zu getByte: Gibt aus einem Byte-Code wieder das Zeichen zurück ' * Umkehrfunktion zu getByte: Gibt aus einem Byte-Code wieder das Zeichen zurück
 ' * ' *
-' * @example 1) Byte einer Zahl. Zahlen sind tandart nach BCD-Codierung 
-' *         ​print_r getChar("​1001"​) 
-' *         <​Integer>​ 9 
-' * @example 2) Dito, aber nach ASCII-Codierung 
-' *         ​print_r getChar("​10011100"​) 
-' *         <​String>​ '​9'​ 
-' * @example 3) String, Standart nach Ascii 
-' *         ​print_r getChar("​10000010"​) 
-' *         <​String>​ '​A'​ 
-' * @example 4) Null, Standart nach Ascii. Es kommt die Rückgabe von chr(NULL) zurück 
-' *         ​print_r getChar("​00000000"​) 
-' *         <​String>​ '​\u0000'​ 
-' * @example 5) Null nach BCD. Ist nciht mehr von 0 unterscheidbar 
-' *         ​print_r getChar("​0000"​) 
-' *         <​Integer>​ 0 
 ' * ' *
 ' * @param ​ String ​ Byte-Code ' * @param ​ String ​ Byte-Code
Line 178: Line 223:
     Dim bitCode As baBitCode: ​  ​bitCode = Switch(Len(iByte) = 8, baASCII, Len(iByte) = 4, baBCD4, True, baNA)     Dim bitCode As baBitCode: ​  ​bitCode = Switch(Len(iByte) = 8, baASCII, Len(iByte) = 4, baBCD4, True, baNA)
     'Falls es keinen von beiden ist, ein Fehler werfen     'Falls es keinen von beiden ist, ein Fehler werfen
-    If bitCode = baNA Then Err.Raise C_BITCODE_CAST_ERROR,​ "​getChar",​ "Input is not a byte in type ASCII oder BCD"+    If bitCode = baDefault ​Then Err.Raise C_BITCODE_CAST_ERROR,​ "​getChar",​ "Input is not a byte in type ASCII oder BCD"
     ​     ​
     'Die Zahl hochrechnen     'Die Zahl hochrechnen
vba/cast/bitandbyte.1398849058.txt.gz · Last modified: 30.04.2014 11:10:58 by yaslaw