Преобразование десятичной дроби в строку - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь преобразовать десятичное значение в строку. Я использую IDE STM32CubeIDE, но получаю сообщение об ошибке типа 'Недопустимый бинарный оператор' . Я могу установить &n на десятичное значение 3695. Мне нужно преобразовать это в строку. Как бы я это сделал?

void main() 
{

    uint8_t TxArr;
    uint16_t Data;
    int a[10];
    int i;
   while (1)
   {
     HAL_I2C_Master_Transmit(&hi2c1,0x16, &TxArr, 1, 1000);
     HAL_I2C_Master_Receive(&hi2c1, 0x17, &Data, 2, 1000);
     for(i=0;i<4;i++)
      {
      a[i]=Data%10+0x30;     //value in Data is 3695.
      Data=Data/10;
      HAL_UART_Transmit(&huart3, a[i], 11, 100);
      HAL_Delay(300);
      }

      }

Ответы [ 2 ]

3 голосов
/ 23 октября 2019

Ошибка вызывается:

n = n / 10;

Что бы это делало, если бы n был указателем (int* n), это то, что он будет повторять n в месте на одну десятую от исходного числа, Вам нужно будет начать использовать обычные операторы массива, если вы хотите, чтобы ваш код работал правильно.

Вторая проблема, с которой вы столкнулись, заключается в следующем: вы объявляете n как массив из 10 целых чиселтипа и с int.

int n[10];

Затем в цикле for вы попытаетесь сделать это:

n > 0; 

Это недопустимая операция, так как n будет распадаться науказатель и как таковой адрес вашего массива сравнивается с 0. Это всегда будет оцениваться как ИСТИНА!

Хороший способ преобразовать целое число в строку (массив символов) - это этот ответ . В вашей ситуации это будет

int yourToBeConvertedNumber;
char str[INT_MAX]; // or any other reasonable upper bound you have set for the input data.
snprintf(str, sizeof(str), "%d", yourToBeConvertedNumber);
0 голосов
/ 23 октября 2019

Вообще говоря, для преобразования целого числа в строку вы можете использовать функцию sprintf. Он должен быть доступен в newlib и даже newlib-nano стандартных библиотеках C.

Однако я предполагаю, что у вас есть массив целых чисел, где каждый элемент является числом от 0 до 9?

Если это так, у вас есть несколько проблем: вы, похоже, обрабатываете переменную n как целое число, а не адрес. Также ваша строка должна быть на один элемент длиннее и состоять из символов.

Вы можете сделать что-то вроде этого:

char a[11];
for(i=0;i<10;i++)
{
   a[i]=n[i]%10 +'0'; 
}
a[11]='\0';
...