CSL Posted March 24, 2016 Share Posted March 24, 2016 I want to take a binary data from any source (string,number,files,etc..) and iterate over each X bits of it in a loop, say take bits 1-5, then 6-10, etc.. Then I want to convert these bits to their corresponding decimal value. but all the binary functions I found in autoit only work with full bytes, and do not let me get smaller sections of bits, like "BinaryMid()" that "Extracts a number of bytes from a binary variant" Can anyone tell me if this is possible to do and how? and also if there is a function to convert those bits to/from decimals? I'm not that familiar with dealing directly with binary, so any help or tips will be very appreciated Context: I'm trying to make a function to encode/decode any given binary data into/from a given array of characters. just like Base64 but using different bases then [a-z A-Z 0-9 +/= ]. My approach currently is to figure out how many bits of binary I can encode with each character, read those bits and convert them to a decimal number, then I will use that number as an index and take the character at that index from the character array and add it to the result string. I'm aware that there may be some padding needed. Link to comment Share on other sites More sharing options...
LarsJ Posted March 25, 2016 Share Posted March 25, 2016 This is possible to do with the DllStruct- and the Bit-commands. If you want 5 bit blocks you can store 5 bytes at a time from your binary data into a 5 byte structure (40 bits). Then you can handle each of the 5 bit blocks one by one. 8 blocks in a total. The CPU only handles 1, 2, 4 or 8 (64 bit CPU) bytes at a time. It does not handle 5 or 7 bytes. To handle 5 bytes you can for example split them up in 2 bytes, 2 bytes and 1 byte. If some of the 5 bit blocks have bits spread over byte 2 and 3 or byte 4 and 5 then you must deal with it. To do all this you will need to be able to handle binary data. And you must be able to convert from binary to decimal numbers in your head. At least for the first 8 bits. If you have large amounts of binary data AutoIt is not the fastest programming language. You'll need a compiled language. What's the purpose for this? I do not think it's possible to make better algorithms for simple encoding/decoding, than those that already exists. Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Link to comment Share on other sites More sharing options...
CSL Posted March 25, 2016 Author Share Posted March 25, 2016 14 minutes ago, LarsJ said: This is possible to do with the DllStruct- and the Bit-commands. If you want 5 bit blocks you can store 5 bytes at a time from your binary data into a 5 byte structure (40 bits). Then you can handle each of the 5 bit blocks one by one. 8 blocks in a total. The CPU only handles 1, 2, 4 or 8 (64 bit CPU) bytes at a time. It does not handle 5 or 7 bytes. To handle 5 bytes you can for example split them up in 2 bytes, 2 bytes and 1 byte. If some of the 5 bit blocks have bits spread over byte 2 and 3 or byte 4 and 5 then you must deal with it. To do all this you will need to be able to handle binary data. And you must be able to convert from binary to decimal numbers in your head. At least for the first 8 bits. If you have large amounts of binary data AutoIt is not the fastest programming language. You'll need a compiled language. What's the purpose for this? I do not think it's possible to make better algorithms for simple encoding/decoding, than those that already exists. Thanks for the reply LarsJ, I did some searching before and tried the bit shifting method but it got complicated fast, I will only deal with small binary data so I instead chose to convert the binary to 0/1 strings and handling that instead, pretty dirty and slow, I Know. Are there any existing encoding functions/libraries that can encode to an arbitrary list of characters? this is exactly what I need. This function is for a little encryption based game I'm doing for fun, I know autoit may not be the best fit but it's fast to write & easy to use, and it's just a small project. Link to comment Share on other sites More sharing options...
LarsJ Posted March 25, 2016 Share Posted March 25, 2016 If you Google in this way I think you'll find something: encode decode site:autoitscript.com Controls, File Explorer, ROT objects, UI Automation, Windows Message MonitorCompiled code: Accessing AutoIt variables, DotNet.au3 UDF, Using C# and VB codeShell menus: The Context menu, The Favorites menu. Shell related: Control Panel, System Image ListsGraphics related: Rubik's Cube, OpenGL without external libraries, Navigating in an image, Non-rectangular selectionsListView controls: Colors and fonts, Multi-line header, Multi-line items, Checkboxes and icons, Incremental searchListView controls: Virtual ListViews, Editing cells, Data display functions Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now