#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 / 8; inBitOffset = position % 8; break; case BUF_OUT: outByteOffset = position / 8; outBitOffset = 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); } }