Итак, у меня проблемы с каким-то кодом.
Я хочу, чтобы эта функция принимала байтовый массив (пока тестируется с одним байтом), преобразовывала байт в двоичный и затем добавляла его к «1» использовать в расчете.
например:
выход: 01110000 ----> 1,01110000
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
double calcByteValue(uint8_t data[], int size);
int main() {
uint8_t test[10];
test[0] = 0x0e;
double d = calcByteValue(test, 8);
return 0;
}
double calcByteValue(uint8_t data[], int size) {
int i;
uint8_t bits[21];
char binary[100];
char str[100] = "1.";
for (i = 0;i < size;i++) {
bits[i] = (data[0] >> i) & 1;
if (bits[i] == 0) {
binary[i] = '0';
printf("0(%d)\n", i);
} else {
binary[i] = '1';
printf("1(%d)\n", i);
}
}
strcat(str, binary);
float d = atof(str);
printf("%f\n", d);
return 0;
//return pow(-1, bits[0]) * pow(2, (128-127)) * atof(str));
}
Вот мой вывод, по какой-то причине он проходит весь цикл просто отлично, но печатает только 6 оригинальных битов, сбивая последние пару битов. Что я делаю не так ???
0(0)
1(1)
1(2)
1(3)
0(4)
0(5)
0(6)
0(7)
1.011100