// *********** // // ファイルにビット単位で書き込むために // 作成。 // // // // *********** #include #include typedef unsigned char byte; typedef struct { byte *data; int lenge; } FileStream_s; typedef FileStream_s *FileStream; FileStream newFileStream() { FileStream stream; stream = (FileStream)malloc(sizeof(FileStream_s)); stream->data =(byte*)calloc(2,sizeof(byte)); stream->lenge = 0; return stream; } void destroyFileStream(FileStream buffer) { free(buffer->data); free(buffer); } FileStream newFileStream_size(int bits) { FileStream temp = newFileStream(); temp->data = (byte*)calloc((2+(bits/8)),sizeof(byte)); temp->lenge = bits; return temp; } FileStream newFileStream_property(byte *buffer,int lenge) { FileStream temp = newFileStream(); temp->data = (byte*)calloc((2+lenge/8),sizeof(byte)); temp->lenge = lenge; return temp; } FileStream shiftFileStream_right(FileStream buffer,int mass) { int i; if( mass > 0) { for(i = (buffer->lenge/8+1);i != 0;i--) { buffer->data[i+1] |= buffer->data[i]<<(8-mass); buffer->data[i] |= buffer->data[i]>>mass; } } } void copyFileStream(const FileStream catch,FileStream throw) { int i; for(i = 0;i<(catch->lenge/8+1);i++) { catch->data[i] = catch->data[i]|throw->data[i]; } catch->lenge = throw->lenge; } void printFileStream(FileStream buffer) { int i,j; int temp; for(i = 0;i < buffer->lenge/8+1;i++) { temp = 0; temp = buffer->data[i]; for(j = 0;(ilenge/8 && j<8 )|| ( j < buffer->lenge%8 ) ;j++) { if((temp&128) == 128) { printf("1"); } else { printf("0"); } temp =temp<<1; } } } FileStream addFileStream(FileStream catch,FileStream throw) { int i,j; FileStream buffer; buffer = newFileStream_size(catch->lenge+throw->lenge); copyFileStream(buffer,catch); shiftFileStream_right(throw,catch->lenge%8); for(i = catch->lenge/8, j=0; j < throw->lenge;i++,j++) { buffer->data[i] |= throw->data[j]; } buffer->lenge += throw->lenge; return buffer; } int main() { byte *a; //int8 a; FileStream data; FileStream data_0; data = newFileStream_size(5); data_0 = newFileStream_size(2); data->data[0] = 254; data->data[0] <<= 3; printFileStream(data); printf("data->lenge==%d\n",data_0->lenge); printf("\n\n\n\n \n\n\n addFileStream\n"); data = addFileStream(data,data_0); printFileStream(data); return 0; }