Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "includes2.h"
- int main(int argc, char *argv[])
- {
- FILE *inputFile;
- FILE *outputFile;
- int byteLength = 8;
- char byte;
- char charSign;
- /*Åpner filene for lesing og skriving*/
- outputFile = fopen(argv[3], "w");
- inputFile = fopen(argv[2], "r");
- /*Skriver ut feilmelding dersom filen er tom*/
- if(inputFile == NULL)
- {
- perror("fopen feilet");
- return 0;
- }
- /*Skriver ut det orginale ASCII bildet*/
- if(0 == strcmp("p", argv[1]))
- {
- if(argc == 3)
- {
- /*Leser en og en char og skriver den ut*/
- while((charSign = fgetc(inputFile)) != EOF)
- {
- printf("%c", charSign);
- }
- }
- }
- /*leser input filen og komprimerer hvert tegn og deretter skriver den til output fil*/
- if(0 == strcmp("e", argv[1]))
- {
- if(argc == 4)
- {
- /*Løkka går så lenge det er flere tegn i filen*/
- while((charSign = fgetc(inputFile)) != EOF)
- {
- if(charSign == ' ')
- {
- /*Trekker fra to hver gang, fordi hvert tegn er representert med to bit*/
- byteLength -= 2;
- /*bruker bitwise or og shifter det byteLength til venstre*/
- /*bit representasjon: 00*/
- byte |= 0 << byteLength;
- }
- if(charSign == ':')
- {
- byteLength -= 2;
- /*bit representasjon: 01*/
- byte |= 1 << byteLength;
- }
- if(charSign == '@')
- {
- byteLength -= 2;
- /*bit representasjon: 10*/
- byte |= 2 << byteLength;
- }
- if(charSign == '\n')
- {
- byteLength -= 2;
- /*bit representasjon: 11*/
- byte |= 3 << byteLength;
- }
- /*Når byteLength er null er en byte fyllt opp og den skrives til outputFile*/
- if(byteLength == 0)
- {
- fputc(byte, outputFile);
- byte = 0;
- byteLength = 8;
- }
- }
- /*Dersom det ikke er nok tegn igjen til å fylle hele byten*/
- if(byteLength != 8){
- fputc(byte, outputFile);
- }
- }
- fclose(outputFile);
- }
- if(0 == strcmp("d", argv[1])){
- if(argc == 3){
- int byte1;
- int i = 0;
- while((charSign = fgetc(inputFile)) != EOF){
- for(i = 6; i >= 0; i-=2){
- /*Shifter to til høyre*/
- byte1 = charSign >> i;
- /*Bruker bitwise "and" med 3 fordi bit-representasjonen til 3 er 11*/
- byte1 &= 3;
- if(byte1 == 0){
- printf("%c", ' ');
- }
- if(byte1 == 1){
- printf("%c", ':');
- }
- if(byte1 == 2){
- printf("%c", '@');
- }
- if(byte1 == 3){
- printf("%c", '\n');
- }
- }
- }
- }
- }
- fclose(inputFile);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement