Преобразование между unsigned long и массивом uint8_t - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь прочитать и записать значение типа unsigned long на карту NFC.

Я работаю с модулем pn532, картой MifareUltralight и библиотекой Adafruit. Кажется, что функция mifareultralight_WritePage принимает только массив типа uint8_t, размер которого 4 байта.

Итак, я хочу сохранить однозначное значение типа длиной четыре байта в массиве Uint8_t и преобразовать массив длиной 4 байта Uint8_t в одну переменную типа long.

#include <Adafruit_PN532.h>

...

uint8_t writeBuffer[4] = { 18, 52, 86, 120 };
nfc.mifareultralight_WritePage(8, writeBuffer);
uint8_t readBuffer[4];
success = nfc.mifareultralight_ReadPage(i, &readBuffer[0]);
    if (success) {
        nfc.PrintHex(readBuffer, 4);
}

1 Ответ

0 голосов
/ 29 марта 2019

in

uint8_t writeBuffer[4] = { 18, 52, 86, 120 };

, если индекс 0 содержит младший байт, просто сделайте, например,

uint8_t writeBuffer[4] = { 18, 52, 86, 120 };
unsigned long v = writeBuffer[0];

for (size_t i = 1; i != 4; ++i)
  v += ((unsigned long) writeBuffer[i]) << (i * 8);

, если индекс 0 содержит старший байт, просто сделайтенапример

uint8_t writeBuffer[4] = { 18, 52, 86, 120 };
unsigned long v = writeBuffer[3];

for (size_t i = 1; i != 4; ++i)
  v += ((unsigned long) writeBuffer[3 - i]) << (i * 8);
...