c - 在 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);
}
解决方案
在
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);
推荐阅读
- c++ - 不能在函数 C++ 中使用覆盖
- dart - Flutter - 如何更新 Sqflite 中的表结构?
- connection - Weave 无法解密 TCP 消息
- android - 从联系人列表中选择联系人并为该联系人选择特定的电子邮件
- mysql - str_to_date() 不适用于正确的语法
- mysql - MySQL - 使用 STR_TO_DATE 进行 IF 查询
- c# - C# Web API 在 POST 上总是得到一个空值
- sql - SQL Server全文搜索,在多个字段上排名
- javascript - Typeahead 和 Bloodhound 动态更改本地值
- iis-7.5 - 在托管管道集成模式下使用 ApplicationPool 访问 IIS 7.5 的 HTTPModule 中的 BeginRequest/EndRequest 事件