Вывести только 7 последних номеров из long long int - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть шестнадцатеричное значение отл.0300E0678C, я конвертирую его в long long int 12899608460, но на этом этапе я должен вывести только 7 последних чисел из long long int - 9608460, поэтому я пытаюсь выполнить sprintf с% lld, но он ничего не возвращает.Есть идеи как это сделать?

#include <SoftwareSerial.h>
#include <ID20Reader.h>
#include <PriUint64.h>


int rx_pin = 3;
int tx_pin = 2;
char output[16];
long long int numer;
char buf[50];

ID20Reader rfid(rx_pin, tx_pin);

void setup() {
    Serial.begin(9600);
    tone(4, 3400, 1000);
     pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  rfid.read();

  if(rfid.available())
  {
    digitalWrite(LED_BUILTIN, HIGH); 
    String code = rfid.get();
    Serial.println(code);
    tone(4, 4000, 500);
    char bufor[12];
    code.toCharArray(bufor,12);
    Serial.println(bufor);
    numer = hexToDec(bufor);
    Serial.println(PriUint64<DEC>(numer));
    delay(500);
    digitalWrite(LED_BUILTIN, LOW);
  }
}


long long hexToDec(String hexString) {

  long long decValue = 0;
  int nextInt;

  for (int i = 0; i < hexString.length(); i++) {

    nextInt = int(hexString.charAt(i));
    if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
    if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
    if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
    nextInt = constrain(nextInt, 0, 15);

    decValue = (decValue * 16) + nextInt;
  }
   return decValue;
}

Ответы [ 2 ]

1 голос
/ 22 сентября 2019

Я делаю:

...

byte myData[16];
int i = 0;

...


 numer = hexToDec(bufor);
    i=0;
   do
    {
    byte y = numer % 10;
    myData[i] = y;
    numer = numer / 10;
    i++;
  }
  while (numer != 0);

  for (int i = 6; i >= 0; i--)
  {
    Serial.print(myData[i]);
  }

И первые тесты оптимистичны;)

0 голосов
/ 22 сентября 2019

Попробуйте что-то вроде этого:

    #include <iostream>
    #include <string>

    int main()
    {
        // Example given
        constexpr long long int p = 0x300E0678C;
        std::printf("Example: %lld\n", p);

        // Create new string with p
        std::string tempStr(std::to_string(p), 0);
        long long int pLast7 = std::atoll( // Convert string to long long integer
            tempStr.substr(tempStr.length() - 7, 7) // cut the string 7 characters from the end, and have the next 7 characters returned
            .c_str()); // convert it to C-style string (const char*) for use with atoll
        std::printf("Last 7: %lld\n", pLast7);
    }

Вот ссылка на cpp.sh на случай, если вы захотите попробовать это сами!

cpp.ш / 53evd

...