#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Print binary number represented as boolean array.
// the most significant bits go first in the output
void print_bin(bool *bits, int nbits) {
for(int i = nbits; i-->0; ) {
if (i % 8 == 0)
}
}
// Convert an integer to binary representation as boolean array.
// the least significant bit is at the start (index 0) of the array
void ull_to_bin(unsigned long long n, bool *bits, int nbits) {
for(int i = 0; i < nbits; i++)
bits[i] = (n >> i) & 1; //store the ith bit in b[i]
}
// Read line from `stream`.
// fail if input line is too long (larger than maxsize)
// return -1 on error
// return size of the line (including trailing '\0') on success
int readline(FILE* stream, char *line, int maxsize) {
char *s
= fgets(line
, maxsize
, stream
); if (s == NULL) return -1; // can't read
if (size == maxsize && s[maxsize-2] != '\n') return -1; // line is too long
return size;
}
int main() {
FILE* fp = stdin; // read input from stdin
const size_t maxline = 38; // 16 + 4 + 16 + \n\0
char line[maxline];
size_t lineno = 1;
for (; readline(fp, line, maxline) > 0; ++lineno) {
// read pair of numbers
unsigned long long x, y;
if (sscanf(line
, "%llx %llx", &x
, &y
) != 2) { //NOTE: it ignores some input fprintf(stderr
, "error: can't parse line #%zd: '%s'\n", lineno
, line
); }
// convert to binary representation and print it
const int nbits = 8 * sizeof(unsigned long long);
bool bits[nbits];
ull_to_bin(x, bits, nbits);
print_bin(bits, nbits);
ull_to_bin(y, bits, nbits);
print_bin(bits, nbits);
}
fprintf(stderr
, "error: line #%zd: not all input is read\n", lineno
); }
}
I2luY2x1ZGUgPHN0ZGJvb2wuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKLy8gUHJpbnQgYmluYXJ5IG51bWJlciByZXByZXNlbnRlZCBhcyBib29sZWFuIGFycmF5LgovLyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIGdvIGZpcnN0IGluIHRoZSBvdXRwdXQKdm9pZCBwcmludF9iaW4oYm9vbCAqYml0cywgaW50IG5iaXRzKSB7CiAgIGZvcihpbnQgaSA9IG5iaXRzOyBpLS0+MDsgKSB7CiAgICAgIHB1dGNoYXIoIjAxIltiaXRzW2ldXSk7CiAgICAgIGlmIChpICUgOCA9PSAwKQogICAgICAgIHB1dGNoYXIoJyAnKTsKICAgfQogICBwdXRjaGFyKCdcbicpOwp9CgovLyBDb252ZXJ0IGFuIGludGVnZXIgdG8gYmluYXJ5IHJlcHJlc2VudGF0aW9uIGFzIGJvb2xlYW4gYXJyYXkuCi8vIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgaXMgYXQgdGhlIHN0YXJ0IChpbmRleCAwKSBvZiB0aGUgYXJyYXkKdm9pZCB1bGxfdG9fYmluKHVuc2lnbmVkIGxvbmcgbG9uZyBuLCBib29sICpiaXRzLCBpbnQgbmJpdHMpIHsKICAgZm9yKGludCBpID0gMDsgaSA8IG5iaXRzOyBpKyspCiAgICAgIGJpdHNbaV0gPSAobiA+PiBpKSAmIDE7IC8vc3RvcmUgdGhlIGl0aCBiaXQgaW4gYltpXQp9CgovLyBSZWFkIGxpbmUgZnJvbSBgc3RyZWFtYC4KLy8gZmFpbCBpZiBpbnB1dCBsaW5lIGlzIHRvbyBsb25nIChsYXJnZXIgdGhhbiBtYXhzaXplKQovLyByZXR1cm4gLTEgb24gZXJyb3IKLy8gcmV0dXJuIHNpemUgb2YgdGhlIGxpbmUgKGluY2x1ZGluZyB0cmFpbGluZyAnXDAnKSBvbiBzdWNjZXNzCmludCByZWFkbGluZShGSUxFKiBzdHJlYW0sIGNoYXIgKmxpbmUsIGludCBtYXhzaXplKSB7CiAgY2hhciAqcyA9IGZnZXRzKGxpbmUsIG1heHNpemUsIHN0cmVhbSk7CiAgaWYgKHMgPT0gTlVMTCkgcmV0dXJuIC0xOyAvLyBjYW4ndCByZWFkCgogIGludCBzaXplID0gc3RybGVuKHMpICsgMTsKICBpZiAoc2l6ZSA9PSBtYXhzaXplICYmIHNbbWF4c2l6ZS0yXSAhPSAnXG4nKSByZXR1cm4gLTE7IC8vIGxpbmUgaXMgdG9vIGxvbmcKCiAgcmV0dXJuIHNpemU7Cn0KCmludCBtYWluKCkgewogIEZJTEUqIGZwID0gc3RkaW47IC8vIHJlYWQgaW5wdXQgZnJvbSBzdGRpbgogIGNvbnN0IHNpemVfdCBtYXhsaW5lID0gMzg7IC8vIDE2ICsgNCArIDE2ICsgXG5cMAogIGNoYXIgbGluZVttYXhsaW5lXTsKICBzaXplX3QgbGluZW5vID0gMTsKICBmb3IgKDsgcmVhZGxpbmUoZnAsIGxpbmUsIG1heGxpbmUpID4gMDsgKytsaW5lbm8pIHsKICAgIC8vIHJlYWQgcGFpciBvZiBudW1iZXJzCiAgICB1bnNpZ25lZCBsb25nIGxvbmcgeCwgeTsKICAgIGlmIChzc2NhbmYobGluZSwgIiVsbHggJWxseCIsICZ4LCAmeSkgIT0gMikgeyAvL05PVEU6IGl0IGlnbm9yZXMgc29tZSBpbnB1dAogICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBjYW4ndCBwYXJzZSBsaW5lICMlemQ6ICclcydcbiIsIGxpbmVubywgbGluZSk7CiAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KCiAgICAvLyBjb252ZXJ0IHRvIGJpbmFyeSByZXByZXNlbnRhdGlvbiBhbmQgcHJpbnQgaXQKICAgIGNvbnN0IGludCBuYml0cyA9IDggKiBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsKICAgIGJvb2wgYml0c1tuYml0c107CiAgICB1bGxfdG9fYmluKHgsIGJpdHMsIG5iaXRzKTsKICAgIHByaW50X2JpbihiaXRzLCBuYml0cyk7CiAgICB1bGxfdG9fYmluKHksIGJpdHMsIG5iaXRzKTsKICAgIHByaW50X2JpbihiaXRzLCBuYml0cyk7CiAgICBwdXRzKCIiKTsKICB9CiAgaWYgKCFmZW9mKGZwKSkgewogICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogbGluZSAjJXpkOiBub3QgYWxsIGlucHV0IGlzIHJlYWRcbiIsIGxpbmVubyk7CiAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgfQp9