Я пытаюсь преобразовать целое число или число с плавающей точкой в массив символов в определенной форме (программирование для mbed, микроконтроллера).
Целые числа должны быть 32-разрядными целыми числами двоичного числа с двоичным порядком байтов
Число с плавающей запятой должно быть 32-разрядным порядковым числом с плавающей точкой в формате IEEE 754
Пробовал несколько вещей:
uint8_t *v;
uint8_t valuePos = 3;
v = (uint8_t *)datum->data.i; //I get the int or float from datum->data.i
buff[lengthEnd++] = v[valuePos--]; //buff is the char array
buff[lengthEnd++] = v[valuePos--];
buff[lengthEnd++] = v[valuePos--];
buff[lengthEnd++] = v[valuePos];
а также
uint32_t i = BigEndian(datum->data.i);
uint8_t * ptr = (uint8_t *) &i;
strcat(buff, (char *) ptr); //maybe strcat isn't a good function to use here
lengthEnd += 4;
Но я не могу заставить это работать, я всегда получаю какой-то другой номер. Что не так?
Похоже, вы пропустили &
оператор.
Пожалуйста, попробуйте это:
v=(uint8_t *)&datum->data.i;
И никогда не использовать strcat
для двоичных данных. Это для строк. Двоичные данные должны обрабатываться с чем-то вроде memcpy
,
Других решений пока нет …