Can MS write hex bytes into a file
Moderators: Dorian (MJT support), JRL
Can MS write hex bytes into a file
Newbie here, and yes I searched and couldn't find an answer
After I find the filesize of a file, I will divide it by a number, then convert that answer to a hex value (4 bytes) to be written into an external binary file. Is this possible with MS??
After I find the filesize of a file, I will divide it by a number, then convert that answer to a hex value (4 bytes) to be written into an external binary file. Is this possible with MS??
Decimal to Hex converter
Hi,
I saw a vbscript example in the forums.
Here is a pure Macro Scheduler method:
Gale
I saw a vbscript example in the forums.
Here is a pure Macro Scheduler method:
Code: Select all
//Digit to HexDigit array
Let>aHex_0=0
Let>aHex_1=1
Let>aHex_2=2
Let>aHex_3=3
Let>aHex_4=4
Let>aHex_5=5
Let>aHex_6=6
Let>aHex_7=7
Let>aHex_8=8
Let>aHex_9=9
Let>aHex_10=A
Let>aHex_13=B
Let>aHex_12=C
Let>aHex_13=D
Let>aHex_14=E
Let>aHex_15=F
SRT>DecToHex
//Convert Decimal Base10 to Hexidecimal Base16
//Up to 65535(dec)=FFFF(hex)
Let>nDec={%DecToHex_Var_1%+0}
Let>nBase=16
Let>nTmp1={Trunc(%nDec%/%nBase%)}
Let>nHex1={%nDec% MOD %nBase%}
Let>nTmp2={Trunc(%nTmp1%/%nBase%)}
Let>nHex2={%nTmp1% MOD %nBase%}
Let>nTmp3={Trunc(%nTmp2%/%nBase%)}
Let>nHex3={%nTmp2% MOD %nBase%}
Let>nTmp4={Trunc(%nTmp3%/%nBase%)}
Let>nHex4={%nTmp3% MOD %nBase%}
MessageModal>%nHex4%-%nHex3%-%nHex2%-%nHex1%
Let>nHex1=aHex_%nHex1%
Let>nHex2=aHex_%nHex2%
Let>nHex3=aHex_%nHex3%
Let>nHex4=aHex_%nHex4%
Let>nHex=%nHex4%%nHex3%%nHex2%%nHex1%
END>DecToHex
GoSub>DecToHex,
MessageModal>%nDec%(dec)=%nHex%(hex)
ExportData command
The help for the ExportData command shows an example of exporting a ascii text string representing a string of hex characters to a dll file.
I guess it depends on how the data needs to be used.
Gale
I guess it depends on how the data needs to be used.
Gale
Binary file support
Macro Scheduler has no native commands to update binary files.
It can import a binary file into a text script from the editor, but that is a manual operation. You could then update the text data and use ExportData to make an updated copy of your binary file.
Do do this all within a script we would need an ImportData command to complement the new ExportData command made available in v11. That would still be clunkier than the direct binary update you want.
Gale
It can import a binary file into a text script from the editor, but that is a manual operation. You could then update the text data and use ExportData to make an updated copy of your binary file.
Do do this all within a script we would need an ImportData command to complement the new ExportData command made available in v11. That would still be clunkier than the direct binary update you want.
Gale
- Marcus Tettmar
- Site Admin
- Posts: 7395
- Joined: Thu Sep 19, 2002 3:00 pm
- Location: Dorset, UK
- Contact:
You can manipulate binary data with VBScript and ADODB.Stream:
http://www.mjtnet.com/forum/viewtopic.php?t=1170#5117
http://www.mjtnet.com/forum/viewtopic.php?t=1170#5117
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar
Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar
Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?
Here is a method where Macro Scheduler can be used to modify any file whether it is binary or text. When modifying a binary file use great caution as you risk making the file unusable. Running an improperly altered executable file might even cause damage to your computer.
A short lecture on file composition.
"Decimal" is a system of number representation wherein numbers are written in powers of 10. "Binary" is a system of number representation wherein numbers are written in powers of 2. "Hexadecimal" is a system of number representation wherein numbers are written in powers of 16. These numbering systems are sometimes called base 10, base 2 and base 16. Since most of us think in terms of base 10, we think of numbers expressed in base 10 as being actual numbers and other bases as mathematical aberrations. In reality all numbering systems are equally valid representations of explicit and unchanging number values.
As we all know, computers process in binary. They do all their "thinking" in ones and zeros
In the DOS/Windows environment, all files are made from 256 building blocks called bytes. Each byte is made of 8 bits. Each bit is a binary number, one or zero. In math terms 8 (bits) to the power of 2 (binary) is 256 (bytes) possible characters.
The 8 bit binary number that represents the first of the 256 possible bytes is 8 zeros "00000000". The 8 bit binary number that represents the last of the 256 possible bytes is 8 ones "11111111". The 8 bit binary number that represents the 78th byte (ASCII character 77 also seen on your keyboard as the letter "M") is "01001101".
The hexadecimal representations of these same decimal numbers (0, 255, 77) would be 0, FF, 4D.
The point here is that there are 256 and only 256 building blocks that make up all the files on every computer that can use Macro Scheduler. Those building blocks can be referred to as binary characters, as hexadecimal characters, as decimal characters or even as octal characters. No matter what math base you reference them from, they are the same building blocks. Calling them binary versus hexadecimal does not alter their value nor does it create a separate set of characters.
Macro Scheduler is capable of reading, writing and manipulating all 256 characters. What a great program. Who could ask for more?
Code: Select all
//Using Notepad as the binary since everyone will probably have it.
Let>OriginalBinaryFile=%Win_Dir%\notepad.exe
Let>NewTempBinaryFile=%Temp_Dir%NotNotePad.exe
/*
//Unremark this block if necessary.
//The built in null character variable "NullChar" was
//introduced in Version 11.1.05 March 3, 2009.
//The following three VBScript lines will create a
//null character variable in all earlier versions.
VBSTART
VBEND
VBEval>CHR(0),NullChar
*/
/*
The next couple of lines define the characters we're going to find in the
Notepad.exe file and the characters we're going to replace them with.
The next line is essentially Let>OldChars=N o t e p a d
Where the spaces are actually null characters (ASCII character 0)
*/
Let>OldChars=N%NullChar%o%NullChar%t%NullChar%e%NullChar%p%NullChar%a%NullChar%d
/*
The next line is essentially Let>NewChars=d a p e t o N (Notepad backwards)
*/
Let>NewChars=d%NullChar%a%NullChar%p%NullChar%e%NullChar%t%NullChar%o%NullChar%N
/*
There are Macro Scheduler functions that will work with ANY file
no matter what characters are involved. There are also
Macro Scheduler functions that will only work with the characters
that are considered "text" characters. I don't have a comprehensive
list of which functions can work with which characters. I only know
what I have tested for previous scripts. I do know that
StringReplace> does not work with all characters. I also know that the
functions used in this script WILL work with all characters.
The functions that this script uses are:
ReadFile>
Separate>
ConCat>
WriteLn>
ReadFile> saves a file's contents to a variable. Separate> finds and
isolates the searched character string. ConCat> reconstructs the file
using the new character string. And WriteLn> creates a new file using
our chosen characters.
*/
ReadFile>OriginalBinaryFile,File
Separate>file,%OldChars%,item
Let>kk=1
Repeat>kk
Add>kk,1
Let>value=item_%kk%
Concat>item_1,%NewChars%%value%
Until>kk,%item_count%
//The next line is very important. We don't want to introduce any
//extra characters into our file.
Let>WLN_NOCRLF=1
WriteLn>NewTempBinaryFile,wres,item_1
/*
The previous ten lines do all the necessary work reading the file,
parsing the file, reconstructing the file and writing the file.
The following concat lines construct a message to be displayed in
Notepad or rather dapetoN.
*/
Let>DTxt=Congratulations.%crlf%
ConCat>DTxt,You have successfully altered the "binary file" %OriginalBinaryFile%%crlf%
ConCat>DTxt,using Macro Scheduler. Notice the title block has been changed.%crlf%
ConCat>DTxt,As have NotePad message boxes.%crlf%%crlf%
ConCat>DTxt,Basically, every occurance of the characters "N o t e p a d" in the %crlf%
ConCat>DTxt,Notepad.exe file are changed to "d a p e t o N" (Notepad spelled backwards)%crlf%%crlf%
ConCat>DTxt,The Help menu is slightly altered but since the help file is a separate file%crlf%
ConCat>DTxt,the contents found under "Help Topics" was not altered.%crlf%
ConCat>DTxt,Menu item "Help" > "About dapetoN" also looks different.%crlf%%crlf%
ConCat>DTxt,%crlf%%crlf%
ConCat>DTxt,The newly created file has been deleted.%crlf%%crlf%
/*
The following lines open the newly created executable file, display
a message in the text area and then, the new executable is deleted. If
the original file is to be replaced, the new file would be copied
over the original file before the new file was deleted. Obviously,
we don't want to do that to Notepad.
*/
Run>NewTempBinaryFile
WaitWindowOpen>Untitled*
SetFocus>Untitled*
Send>DTxt
DeleteFile>NewTempBinaryFile
"The above script will create a copy of Notepad.exe with the text Notepad reversed. You can run it on any system and it will not alter the existing copy of Notepad so give it a go. Just copy it to a new macro and hit Run".
A short lecture on file composition.
"Decimal" is a system of number representation wherein numbers are written in powers of 10. "Binary" is a system of number representation wherein numbers are written in powers of 2. "Hexadecimal" is a system of number representation wherein numbers are written in powers of 16. These numbering systems are sometimes called base 10, base 2 and base 16. Since most of us think in terms of base 10, we think of numbers expressed in base 10 as being actual numbers and other bases as mathematical aberrations. In reality all numbering systems are equally valid representations of explicit and unchanging number values.
As we all know, computers process in binary. They do all their "thinking" in ones and zeros
In the DOS/Windows environment, all files are made from 256 building blocks called bytes. Each byte is made of 8 bits. Each bit is a binary number, one or zero. In math terms 8 (bits) to the power of 2 (binary) is 256 (bytes) possible characters.
The 8 bit binary number that represents the first of the 256 possible bytes is 8 zeros "00000000". The 8 bit binary number that represents the last of the 256 possible bytes is 8 ones "11111111". The 8 bit binary number that represents the 78th byte (ASCII character 77 also seen on your keyboard as the letter "M") is "01001101".
The hexadecimal representations of these same decimal numbers (0, 255, 77) would be 0, FF, 4D.
The point here is that there are 256 and only 256 building blocks that make up all the files on every computer that can use Macro Scheduler. Those building blocks can be referred to as binary characters, as hexadecimal characters, as decimal characters or even as octal characters. No matter what math base you reference them from, they are the same building blocks. Calling them binary versus hexadecimal does not alter their value nor does it create a separate set of characters.
Macro Scheduler is capable of reading, writing and manipulating all 256 characters. What a great program. Who could ask for more?