alme123
Goto Top

Binär Übersetzer per Batch (Vbs)

Hallo zusammen,

ist es möglich, eine Batch Datei zu erstellen, die folgendes tut:

in Variable "tzv" befindet sich ein Text (vielleicht auch ü,ä,ö,ß,é,è) (z.B.: "Herr Meier schießt mit gewählten Schüßen auf André")
diese soll in Binär codiert und ausgegeben werden.
Dieser Binärcode soll dann in HEX konvertiert und zuletzt nach Decimal codiert werden.

Außerdem sollte dieser Prozess auch rückgängig gemacht werden können (Decimal -> HEX -> Binär ->Text)


Ist dies möglich oder nur Teile der Frage?


Vielen Dank im Vorraus,

Alme123

Content-Key: 211108

Url: https://administrator.de/contentid/211108

Printed on: April 23, 2024 at 21:04 o'clock

Mitglied: 76109
76109 Jul 10, 2013 updated at 20:12:31 (UTC)
Goto Top
Hallo Alme123!

Hier mal in VBS von (Ansi)-Text > Bin > Hex > Dez:
Const strFile = "C:\Test\Conv.txt"  

Const strText = "Herr Meier schießt mit gewählten Schüssen auf André"  

For i = 1 To Len(strText)
    iByte = CByte(Asc(Mid(strText, i, 1)))
    
    strHex = Right("0" & Hex(iByte), 2)  
    strDec = Right("00" & iByte, 3)  
    
    strBin = ""  
    For b = 7 To 0 Step -1
        If iByte And 2 ^ b Then
            strBin = strBin & 1
        Else
            strBin = strBin & 0
        End If
    Next
        
    strHexText = strHexText & strHex
    strDecText = strDecText & strDec
    strBinText = strBinText & strBin
Next

With CreateObject("Scripting.FileSystemObject").CreateTextFile(strFile)  
	.WriteLine "Bin 8-stellig: " & vbNewLine & strBinText & vbNewLine  
	.WriteLine "Hex 2-stellig: " & vbNewLine & strHexText & vbNewLine   
	.WriteLine "Dez 3-stellig: " & vbNewLine & strDecText  
	.Close
End with

Gruß Dieter
Member: Alme123
Alme123 Jul 11, 2013 at 11:00:22 (UTC)
Goto Top
Hallo didi1954,

dein Script funktioniert; aber nicht so, wie ich es meinte:

Es soll einen Text (ANSI) in Binär codieren. Dieser Binärcode soll dann in HEX und dieser darauf in Dec codiert werden.
Könnte man es auch machen, dass der zukonvertierende (ANSI) Text aus einer Datei eingelesen wird?

Würde auch die Entschlüsselung funktionieren, und wenn ja, wie?

Vielen Dank im Vorraus an dich und alle,

Alme123
Mitglied: 76109
76109 Jul 11, 2013 at 11:26:19 (UTC)
Goto Top
Hallo Alme!

dein Script funktioniert; aber nicht so, wie ich es meinte:
War ja auch nur mal ein erster Ansatzface-wink

Worin der Sinn von 'erst nach Bin, dann nach Hex und danach in Dez' liegen soll, hast Du ja nicht erklärt und mir fällt dazu auch irgendwie nix einface-wink

Die Rückkonvertierung habe ich bewusst weggelassen, damit andere auch noch was zum spielen haben. Ist eigentlich recht Simpel und Du könntest Dir ja auch etwas Mühe geben und zumindest mal einen Ansatz versuchen...

Gruß Dieter
Member: colinardo
colinardo Jul 11, 2013 updated at 14:49:35 (UTC)
Goto Top
Hallo Alme123,
hier noch etwas mehr Input:
(In Zeile 1 noch den Pfad zur Textdatei angeben)

FILEPATH = "C:\DeineTextDatei.txt"  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objText = objFSO.OpenTextFile(FILEPATH, 1)
strText = objText.ReadAll
objText.Close()

'----------------Umwandlungen---------------------  
'String zu Binär  
sBinary = StringToBinary(strText)
'String zu Hex  
sHex = StringToHex(strText)
'String zu Dezimal  
sDec = StringToDec(strText)
'Binär zu String  
sString = BinaryToString(sBinary)
'-------------------------------------------------  
'Ausgabe  
MsgBox "Binärwerte des Strings: " & vbNewLine & sBinary  
MsgBox "Hexwerte des Strings: " & vbNewLine & sHex  
MsgBox "Dezimalwerte des Strings: " & vbNewLine & sDec  
MsgBox "Umwandlung der Binärwerte zurück in den Text: " & vbNewLine & sString  
'-------  

'------ Funktionen ------------  
Function StringToDec(sText)
	sDec = ""  
	aByte = StringToByteArray(sText)
	For Each b In aByte
		sDec = sDec & b
	Next
	StringToDec = sDec
End Function

Function StringToByteArray(sText)
	Dim iByte()
	For i = 1 To Len(sText)
		ReDim Preserve iByte(i)
		iByte(i-1) = CByte(Asc(Mid(sText,i,1)))
	Next
	StringToByteArray = iByte
End Function

Function ByteArrayToString(aByte)
	sString = ""  
	For i = 0 To UBound(aByte)
		sString = sString & Chr(CStr("&h" & Hex(aByte(i))))  
	Next
	ByteArrayToString = sString
End Function

Function StringToHex(sText)
	sHex = ""  
	For i = 1 To Len(sText)
		sHex = sHex & Right("0" & Hex(CByte(Asc(Mid(sText,i,1)))),2)  
	Next
	StringToHex = sHex
End Function

Function HexToString(sHex)
	sString = ""  
	For i = 1 To Len(sHex) Step 2
		sString = sString & Chr(CStr("&h" & Mid(sHex,i,2)))  
	Next
	HexToString = sString
End Function

Function StringToBinary(sText)
	sBinary = ""  
	For i = 1 To Len(sText)
		iByte = CByte(Asc(Mid(sText, i, 1))) 
	  	For b = 7 To 0 Step -1
	  		If iByte >= 2 ^ b Then
	  			sBinary = sBinary & "1"  
	  			iByte = iByte - (2 ^ b)
	  		Else
	  			sBinary = sBinary & "0"  
	  		End If
	  	Next
	Next
	StringToBinary = sBinary
End Function

Function BinaryToString(sBinary)
	sString = ""  
	For i = 1 To Len(sBinary) Step 8
		sByte = Mid(sBinary,i,8)
		iByte = 0
		For b = 7 To 0 Step - 1
			If Mid(sByte,8-b,1) = 1 Then
				iByte = iByte + (2^b)
			End If
		Next
		sString = sString & Chr(CStr("&h" & Hex(iByte)))  
	Next
	BinaryToString = sString
End Function
'----------------------  

@76109
deine Umwandlung in Binär bringt bei mir keine korrekten Ergebnisse:

Grüße Uwe
Mitglied: 76109
76109 Jul 11, 2013 updated at 14:51:37 (UTC)
Goto Top
Hallo colinardo!

deine Umwandlung in Binär bringt bei mir keine korrekten Ergebnisse:
Kann ich jetzt nicht so ganz nachvollziehen, zumal bei mir beide Richtungen funktionieren?face-sad

Hier noch mal das Ganze:
Const strFileBin = "C:\Test\Bin.txt"  
Const strFileHex = "C:\Test\Hex.txt"  
Const strFileDec = "C:\Test\Dec.txt"  

Const strInput = "Herr Meier schießt mit gewählten Schüssen auf André"  

'Text To Bin, Dez, Hex________________________________________________  

For i = 1 To Len(strInput)
    iByte = CByte(Asc(Mid(strInput, i, 1)))
    
    strHex = Right("0" & Hex(iByte), 2)  
    strDec = Right("00" & iByte, 3)  
    
    strBin = ""  
    For b = 7 To 0 Step -1
        If iByte And (2 ^ b) Then
            strBin = strBin & 1
        Else
            strBin = strBin & 0
        End If
    Next
        
    strHexText = strHexText & strHex
    strDecText = strDecText & strDec
    strBinText = strBinText & strBin
Next

With CreateObject("Scripting.FileSystemObject")  
    With .CreateTextFile(strFileBin)
        .Write strBinText:  .Close
    End With
    With .CreateTextFile(strFileHex)
        .Write strHexText:  .Close
    End With
    With .CreateTextFile(strFileDec)
        .Write strDecText:  .Close
    End With
End With

'Bin To Text__________________________________________________________  

With CreateObject("Scripting.FileSystemObject")  
    strBinText = .OpenTextFile(strFileBin).ReadAll
End With

strText = ""  
For i = 1 To Len(strBinText) Step 8
    strBin = StrReverse(Mid(strBinText, i, 8))
    
    iByte = 0
    For b = 0 To 7
        If Mid(strBin, b + 1, 1) = 1 Then
            iByte = iByte Or (2 ^ b)
        End If
    Next
        
    strText = strText & Chr(iByte)
Next
MsgBox strText,,"BinToText..."  

'Dec To Text__________________________________________________________  

With CreateObject("Scripting.FileSystemObject")  
    strDecText = .OpenTextFile(strFileDec).ReadAll
End With

strText = ""  
For i = 1 To Len(strDecText) Step 3
    strText = strText & Chr(CByte(Mid(strDecText, i, 3)))
Next
MsgBox strText,,"DecToText..."  

'Hex To Text__________________________________________________________  

With CreateObject("Scripting.FileSystemObject")  
    strHexText = .OpenTextFile(strFileHex).ReadAll
End With

strText = ""  
For i = 1 To Len(strHexText) Step 2
    strText = strText & Chr(CByte("&H" & Mid(strHexText, i, 2)))  
Next
MsgBox strText,,"HexToText..."  

Gruß Dieter

[edit] hab mal vorsichthalber die '2 ^ b' in Klammer gesetzt [/edit]
Member: colinardo
colinardo Jul 11, 2013 updated at 16:03:19 (UTC)
Goto Top
Hallo Dieter ,weiß der Geier woran's gelegen hat, jetzt gehts auf einmal ... sorry. Hatte vorher das Problem das z.B. für ein H dies ausgegeben wurde 00101000 anstatt 01001000; das ganze also um ein Bit verschoben war.
Vielleicht ist da ein Bit im RAM gekippt face-wink
Mitglied: 76109
76109 Jul 11, 2013 at 15:04:54 (UTC)
Goto Top
Hallo Uwe!

Seltsam, seltsam... Konnte nämlich nix verwerfliches an der Syntax erkennenface-smile

Gruß Dieter
Member: colinardo
colinardo Jul 11, 2013 updated at 15:31:48 (UTC)
Goto Top
Probier mal b ^ 2 anstatt 2 ^ b dann kommt es zu dem Phänomen. Hatte den Code aber hier über "Quelltext" rauskopiert. Naja egal, Hauptsache Ursache entdeckt und abgehakt ...face-smile
Mitglied: 76109
76109 Jul 11, 2013 at 16:00:57 (UTC)
Goto Top
Hallo Uwe!

Probier mal b ^ 2 anstatt 2 ^ b dann kommt es zu dem Phänomen
Nö, hatte diesbezüglich keine Änderung vorgenommen. Das einzige, was ich gestern noch geändert hatte, war eine Korrektur von dem Wort 'Schüßen' nach 'Schüssen'face-wink

Hab's probiert, kommt bei mir knapp daneben "H=00101000" rausface-smile

Gruß Dieter