Initial version
This commit is contained in:
commit
b57d85c68b
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.code-workspace
|
BIN
binaryEditor
Executable file
BIN
binaryEditor
Executable file
Binary file not shown.
82
binaryEditor.c
Normal file
82
binaryEditor.c
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#include "binaryEditor.h"
|
||||||
|
|
||||||
|
char *input;
|
||||||
|
unsigned int inByteOffset = 0;
|
||||||
|
unsigned short inBitOffset = 0;
|
||||||
|
|
||||||
|
char *output;
|
||||||
|
unsigned int outByteOffset = 0;
|
||||||
|
unsigned short outBitOffset = 0;
|
||||||
|
|
||||||
|
void setBuffer(Buffer buffer, void *data){
|
||||||
|
switch (buffer){
|
||||||
|
case BUF_IN:
|
||||||
|
input = (char *) data;
|
||||||
|
inByteOffset = 0;
|
||||||
|
inBitOffset = 0;
|
||||||
|
break;
|
||||||
|
case BUF_OUT:
|
||||||
|
output = (char *) data;
|
||||||
|
outByteOffset = 0;
|
||||||
|
outBitOffset = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void seekBuffer(Buffer buffer, unsigned int position){
|
||||||
|
switch (buffer){
|
||||||
|
case BUF_IN:
|
||||||
|
inByteOffset = position - (position % 8);
|
||||||
|
inBitOffset = position % 8;
|
||||||
|
break;
|
||||||
|
case BUF_OUT:
|
||||||
|
outByteOffset = position - (position % 8);
|
||||||
|
inBitOffset = position % 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int getBufferOffset(Buffer buffer){
|
||||||
|
switch (buffer){
|
||||||
|
case BUF_IN:
|
||||||
|
return (inByteOffset * 8) + inBitOffset;
|
||||||
|
case BUF_OUT:
|
||||||
|
return (outByteOffset * 8) + outBitOffset;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char readBit(){
|
||||||
|
char result = (input[inByteOffset] & (((char) 1) << ( 7 - inBitOffset))) >> (7 - inBitOffset);
|
||||||
|
inBitOffset++;
|
||||||
|
if (inBitOffset >= 8){
|
||||||
|
inByteOffset++;
|
||||||
|
inBitOffset = 0;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
char readByte(){
|
||||||
|
char result = 0;
|
||||||
|
for (int i = 0; i < 8; i++){
|
||||||
|
unsigned short bit = readBit();
|
||||||
|
result += bit << (7 - i);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeBit(unsigned char bit){
|
||||||
|
output[outByteOffset] += bit << (7 - outBitOffset);
|
||||||
|
outBitOffset++;
|
||||||
|
if (outBitOffset >= 8){
|
||||||
|
outByteOffset++;
|
||||||
|
outBitOffset = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeByte(unsigned char byte){
|
||||||
|
for (int i = 7; i >= 0; i--){
|
||||||
|
writeBit((byte & (1 << i)) >> i);
|
||||||
|
}
|
||||||
|
}
|
48
binaryEditor.h
Normal file
48
binaryEditor.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#ifndef BINARYEDITOR
|
||||||
|
#define BINARYEDITOR
|
||||||
|
|
||||||
|
typedef enum{
|
||||||
|
BUF_IN,
|
||||||
|
BUF_OUT
|
||||||
|
} Buffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Allows setting the input and output buffers for the binary editor.
|
||||||
|
*/
|
||||||
|
void setBuffer(Buffer buffer, void *data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Allows the changing of the read/write position in the given buffer.
|
||||||
|
position is specified in bits.
|
||||||
|
*/
|
||||||
|
void seekBuffer(Buffer buffer, unsigned int position);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns what the current offset of a buffer is, in bits.
|
||||||
|
It gives the index of the next bit to be read/written
|
||||||
|
*/
|
||||||
|
unsigned int getBufferOffset(Buffer buffer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the next bit from the read buffer.
|
||||||
|
*/
|
||||||
|
char readBit();
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the next 8 bits from the read buffer.
|
||||||
|
This is equivalent to calling readBit() 8 times.
|
||||||
|
*/
|
||||||
|
char readByte();
|
||||||
|
|
||||||
|
/**
|
||||||
|
This writes a single bit to the output buffer
|
||||||
|
*/
|
||||||
|
void writeBit(unsigned char bit);
|
||||||
|
|
||||||
|
/**
|
||||||
|
This writes one byte to the output buffer.
|
||||||
|
This is equivalent to calling writeBit() 8 times.
|
||||||
|
*/
|
||||||
|
void writeByte(unsigned char byte);
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user