首页 > 解决方案 > 在 unsigned long 和 uint8_t 数组之间转换

问题描述

我正在尝试向 NFC 卡读取和写入无符号长类型值。

我正在使用 pn532 模块、MifareUltralight 卡和 Adafruit 库。mifareultralight_WritePage 函数似乎只接受 uint8_t 类型的数组,其大小为 4 字节。

所以我想将一个四字节长类型的值一个接一个地存储在一个 Uint8_t 数组中,并将一个 4 字节长度的 Uint8_t 数组转换为一个长类型变量。

#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);
}

标签: carduinomifareadafruit

解决方案


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);

推荐阅读