aben20807 / blog-post-issues

https://aben20807.github.io/
MIT License
9 stars 2 forks source link

C convert long integer to bytes (binary) #144

Open aben20807 opened 1 year ago

aben20807 commented 1 year ago

https://godbolt.org/z/qzq4jWK6P

#include <stdio.h>
#include <string.h>

void longtobin1(unsigned long n) {
    char str[9];
    snprintf(str,8, "%c%c%c%c%c%c%c%c", 
    (unsigned char)((n >> 0) & 0xFF),
    (unsigned char)((n >> 8) & 0xFF),
    (unsigned char)((n >> 16) & 0xFF),
    (unsigned char)((n >> 24) & 0xFF),
    (unsigned char)((n >> 32) & 0xFF),
    (unsigned char)((n >> 40) & 0xFF),
    (unsigned char)((n >> 48) & 0xFF),
    (unsigned char)((n >> 56) & 0xFF));
    for (int i = 0; i < 8; i++) {
        printf("%c", str[i]);
    }
}

void longtobin2(unsigned long n) {
    union {
        unsigned long i;
        char s[8];
    }x = {n};
    for (int i = 0; i < sizeof(n); i++) {
        printf("%c", x.s[i]);
    }
}

void longtobin3(unsigned long n) {
    char s[sizeof(n)];
    memcpy(s, &n, sizeof(n));
    for (int i = 0; i < sizeof(n); i++) {
        printf("%c", s[i]);
    }
}

int main(int argc, char *argv[]) {
    unsigned long n = 201339578400;
    longtobin1(n);
    longtobin2(n);
    longtobin3(n);
    return 0;
}