Skip to content

Instantly share code, notes, and snippets.

@boogermann
Created September 19, 2022 15:56
Show Gist options
  • Select an option

  • Save boogermann/fba1f59c87f9c8c9404cc68878b4eb1a to your computer and use it in GitHub Desktop.

Select an option

Save boogermann/fba1f59c87f9c8c9404cc68878b4eb1a to your computer and use it in GitHub Desktop.

Revisions

  1. boogermann created this gist Sep 19, 2022.
    55 changes: 55 additions & 0 deletions reverse_bits.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    /*******************************************************************************
    * SPDX-License-Identifier: CC0-1.0
    * SPDX-FileType: SOURCE
    * SPDX-FileCopyrightText: (c) 2022, Public Domain
    ******************************************************************************/

    #include <cstdint>
    #include <cstdio>
    #include <cstdlib>

    int main(int argc, char *argv[]) {
    uint8_t *buf;
    FILE *fp;
    if(argc != 3) {
    printf("\nWrong parameters given\nUsage: reverse_bits [file_in] [file_out]\n");
    return -1;
    }
    fp = fopen(argv[1], "rb");
    if(fp == NULL) {
    printf("Couldn't open the file %s for input\n", argv[1]);
    return -1;
    }
    fseek(fp, 0L, SEEK_END);
    long size = ftell(fp);
    fseek(fp, 0L, SEEK_SET);

    buf = (uint8_t *) malloc(size);
    if(buf == NULL) {
    printf("Couldn't malloc file\n");
    return -1;
    }

    uint8_t in;
    for(int i = 0; i < size; i++) {
    fread(&in, 1, 1, fp);
    in = ((in & 1) << 7) | ((in & 2) << 5) | ((in & 4) << 3) | ((in & 8) << 1) | ((in & 16) >> 1) | ((in & 32) >> 3) | ((in & 64) >> 5) | ((in & 128) >> 7);

    buf[i] = in;
    }
    fclose(fp);

    printf("Reversed %ld bytes\n", size);
    fp = fopen(argv[2], "wb");
    if(fp == NULL) {
    printf("Couldn't open the file %s for output\n", argv[2]);
    return -1;
    }
    fwrite(buf, 1, size, fp);
    fclose(fp);

    free(buf);
    printf("Done\n");

    return 0;
    }