вопрос по strtol

whoim
Offline
Зарегистрирован: 03.11.2011

 Собсно, вот

byte RX_Data[32];
....
....

    long utime;
    RX_Data[15] = '\0';
    utime = strtol((char*)RX_Data, NULL, 10);
    Serial.println(utime, DEC);

возвращает в терминал 0

Если же так:

    char utime[10];
    for (int x=0; x<=9; x++)
      utime[x] = RX_Data[5 + x];

    long utime;
    utime = strtol(utime, NULL, 10);

То все в порядке. Разница между массивами:
1) RX_Data тип byte, utime тип char []
2) Разная длинна
3) В начале RX_Data идут буквы, пробле и потом цифры. В конце нули.

Вроде как strtol должна сама разобраться в массиве и вытащить из него числа. Но она этого не делает, видимо не понимает длинну RX_Char

Подскажите? )
 

whoim
Offline
Зарегистрирован: 03.11.2011

 Ага

При появлении первого символа, не отвечающего  этой  форме,
         обработка прекращается.

Придется в цикле все же перегонять данные, ибо как заставить strtol читать не с начала строки я хз.. хотя..

whoim
Offline
Зарегистрирован: 03.11.2011

 хы

utime = strtol((char*)RX_Data + 4, NULL, 10);

я начинаю понимать и любить эти ваши си )))) Спасибо!
ЗЫ который раз замечено и проверено.. пока не напишу сюда - мысль в голову не идет )

sav liana
Offline
Зарегистрирован: 28.11.2016

Подскажите, как преобразовать строку, например, "1B" в десятичное целое число 27?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

sav liana пишет:

Подскажите, как преобразовать строку, например, "1B" в десятичное целое число 27?

Боюсь, Вы спрашиваете совсем не то, что хотите узнать.

Вы осознаете, что десятичное число в компьютере может быть только в виде строки? Вам действительно нужно преобразовать одну строку в другую? Или нужно преобразовать строку в число? В последнем случае число будет не десятичным.

sav liana
Offline
Зарегистрирован: 28.11.2016
// преобразование части строки HEX "1B" в число Int 27
String MyStr = "41 05 1B AB";   //41 05 1B AB
char myStr[13] = "-- -- -- -- ";

void setup() {
  Serial.begin(9600);
}

void loop() {  
  unsigned int x = 0;
  MyStr.toCharArray(myStr, MyStr.length()+1);
  Serial.println(myStr);
  x = strtol(&myStr[6],0,16);
  Serial.println(x);
  delay(1000);
}