【求助】数组转换为16进制字符串
本帖最后由 maxims 于 2016-4-28 17:22 编辑/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer < 0x10 ? " 0" : " ");
Serial.print(buffer, HEX);
}
}
Rc522的卡号,读出来是数组格式,一般用上面的方法进行输出为字符串。
但是,我在程序中需要引用它。通常是如下引用
if (rfid.uid.uidByte != nuidPICC ||
rfid.uid.uidByte != nuidPICC ||
rfid.uid.uidByte != nuidPICC ||
rfid.uid.uidByte != nuidPICC ) {
Serial.println(F("A new card has been detected."));
但是,我只想要16进制的字符串引用,该如何转换呢?
比如,我需要直接输出到1602,它就必须是"xxxxxxxx"这种【16进制字符串】
这是RC522的Demo
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
// Init array that will store new NUID
byte nuidPICC;
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte = 0xFF;
}
Serial.println(F("This code scan the MIFARE Classsic NUID."));
Serial.print(F("Using the following key:"));
printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
void loop() {
// Look for new cards
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte != nuidPICC ||
rfid.uid.uidByte != nuidPICC ||
rfid.uid.uidByte != nuidPICC ||
rfid.uid.uidByte != nuidPICC ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC = rfid.uid.uidByte;
}
Serial.println(F("The NUID tag is:"));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print(F("In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
}
else Serial.println(F("Card read previously."));
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer < 0x10 ? " 0" : " ");
Serial.print(buffer, HEX);
}
}
/**
* Helper routine to dump a byte array as dec values to Serial.
*/
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer < 0x10 ? " 0" : " ");
Serial.print(buffer, DEC);
}
} :Q又没人理我。。。。难道我额问题太弱智? sprintf(buffer,"%X%X%X%X",nuid,nuid,nuid,nuid); maxims 发表于 2016-4-27 23:25 static/image/common/back.gif
又没人理我。。。。难道我额问题太弱智?
你不是太弱智同,是含糊不清。您倒是给几个有代表性、有概括性的,输入和输出的样例啊。另外你所说的字符串的“引用”是什么意思?是C++的“引用变量”还是别的什么?不要发明新名词好不好。 cjnt007 发表于 2016-4-28 10:10 static/image/common/back.gif
sprintf(buffer,"%X%X%X%X",nuid,nuid,nuid,nuid);
额,好像有那么点道理,回头我试试~先谢了。 GDHack 发表于 2016-4-28 15:40 static/image/common/back.gif
你不是太弱智同,是含糊不清。您倒是给几个有代表性、有概括性的,输入和输出的样例啊。另外你所说的字符 ...
好吧~
先看第一段代码,它是把byte *buffer用下标进行访问并输出到串口。串口软件上收到的就是一个连续的字符串了。
byte *buffer实际上是把rfid.uid.uidByte的内容通过函数调用传递过去的。
假设:
rfid.uid.uidByte = {'A','B','1','2','3','4'}//请先别管这个语句是否成立与否,我只是表示它内容大概如此。
我可以通过void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer < 0x10 ? " 0" : " ");
Serial.print(buffer, HEX);
}
}把他输出到串口,得到AB1234。
这是串口软件中得到的。
假设,我在程序里边需要lcd.print("hello, world!");明显"hello, world!"它是个字符串,直接lcd.print(rfid.uid.uidByte);肯定是不行的。又如:Serial.print(rfid.uid.uidByte+"is my name");它也是不行的。我只能"AB1234"+"is my name"。
问题:我如何才能方便的把这个rfid.uid.uidByte当成字符串来使用(引用?) maxims 发表于 2016-4-28 17:21 static/image/common/back.gif
好吧~
先看第一段代码,它是把byte *buffer用下标进行访问并输出到串口。串口软件上收到的就是一个连续的 ...
其实你真正的问题是:如何将BYTE数组变量转化成String。
这样喽:
void setup() {
Serial.begin(9600);
char b[] = {'L', 'y', 'l', 'e', ' ', 'C', 'h', 'e', 'n'};
String s;
s = String(b);
Serial.println("I am " + s);
Serial.println("I am " + s);
Serial.println("I am " + s);
Serial.println("Important words repeated for three!");
}
void loop() {}
不过中文字符似乎会显示出错 GDHack 发表于 2016-4-29 16:16 static/image/common/back.gif
其实你真正的问题是:如何将BYTE数组变量转化成String。
这样喽:
你这个代码,我一楼不是有了?
你总结的问题是对的,但答案却不是我要的。 maxims 发表于 2016-4-29 21:34 static/image/common/back.gif
你这个代码,我一楼不是有了?
你总结的问题是对的,但答案却不是我要的。
哪里有!我贴的代码是指用“String(array)”来建立String对象。你不是想要“方便的把这个rfid.uid.uidByte当成字符串来使用”么?这不是有String了?
看来我是帮不了你了…… GDHack 发表于 2016-4-30 14:57 static/image/common/back.gif
哪里有!我贴的代码是指用“String(array)”来建立String对象。你不是想要“方便的把这个rfid.uid.uidByt ...
嗷,Sorry,我漏看了,String(b)这句了。我还以为是用Serial输出哪些呢。
谢谢~
页:
[1]