/* vim: ft=c ff=unix fenc=utf-8
* file: xx.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
#include <math.h>
/* input bin data *MUST* be eq 32 bits in little-endian byte order */
float
bin2float (unsigned char *bin) {
float result = 1.f; /* declare with imaginary unit */
int e = bin[3] - 127;
int bitno;
/* first byte (7 bits) */
for (bitno = 7; bitno > -1; bitno--)
if (bin[2] & (1 << bitno))
result
+= pow(2, -1 * (7 - bitno
)); /* second octet */
for (bitno = 8; bitno > -1; bitno--)
if (bin[1] & (1 << bitno))
result
+= pow(2, -1 * (8 - bitno
+ 7)); /* third octet */
for (bitno = 8; bitno > -1; bitno--)
if (bin[0] & (1 << bitno))
result
+= pow(2, -1 * (8 - bitno
+ 15)); /* check invert bit */
if (bin[2] & 0x80)
result *= -1;
return result;
}
int
main (int argc, char *argv[])
{
unsigned char x[] = {0x00, 0x00, 0x72, 0x81};
return EXIT_SUCCESS;
}
LyogdmltOiBmdD1jIGZmPXVuaXggZmVuYz11dGYtOAogKiBmaWxlOiB4eC5jCiAqLwojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxzdGRib29sLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8bWF0aC5oPgoKLyogaW5wdXQgYmluIGRhdGEgKk1VU1QqIGJlIGVxIDMyIGJpdHMgaW4gbGl0dGxlLWVuZGlhbiBieXRlIG9yZGVyICovCmZsb2F0CmJpbjJmbG9hdCAodW5zaWduZWQgY2hhciAqYmluKSB7CglmbG9hdCByZXN1bHQgPSAxLmY7IC8qIGRlY2xhcmUgd2l0aCBpbWFnaW5hcnkgdW5pdCAqLwoJaW50IGUgPSBiaW5bM10gLSAxMjc7CglpbnQgYml0bm87CgkvKiBmaXJzdCBieXRlICg3IGJpdHMpICovCglmb3IgKGJpdG5vID0gNzsgYml0bm8gPiAtMTsgYml0bm8tLSkKCQlpZiAoYmluWzJdICYgKDEgPDwgYml0bm8pKQoJCQlyZXN1bHQgKz0gcG93KDIsIC0xICogKDcgLSBiaXRubykpOwoJLyogc2Vjb25kIG9jdGV0ICovCglmb3IgKGJpdG5vID0gODsgYml0bm8gPiAtMTsgYml0bm8tLSkKCQlpZiAoYmluWzFdICYgKDEgPDwgYml0bm8pKQoJCQlyZXN1bHQgKz0gcG93KDIsIC0xICogKDggLSBiaXRubyArIDcpKTsKCS8qIHRoaXJkIG9jdGV0ICovCglmb3IgKGJpdG5vID0gODsgYml0bm8gPiAtMTsgYml0bm8tLSkKCQlpZiAoYmluWzBdICYgKDEgPDwgYml0bm8pKQoJCQlyZXN1bHQgKz0gcG93KDIsIC0xICogKDggLSBiaXRubyArIDE1KSk7CglyZXN1bHQgKj0gcG93KDIsIGUpOwoJLyogY2hlY2sgaW52ZXJ0IGJpdCAqLwoJaWYgKGJpblsyXSAmIDB4ODApCgkJcmVzdWx0ICo9IC0xOwoJcmV0dXJuIHJlc3VsdDsKfQoKaW50Cm1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKCXVuc2lnbmVkIGNoYXIgeFtdID0gezB4MDAsIDB4MDAsIDB4NzIsIDB4ODF9OwoJcHJpbnRmKCIlZlxuIiwgYmluMmZsb2F0KHgpKTsKCXJldHVybiBFWElUX1NVQ0NFU1M7Cn0KCg==