Arduino unsigned long int to char *

时间:2016-05-14 15:16:14

标签: c++ c arduino embedded

我在Attiny85上编码,定制了IRremote和SSD1306库。

接收IR数据时,结果以这种方式存储:

unsigned long                 value     // Decoded value, max 32 bits
volatile unsigned int         *rawbuf   // Raw interval in 50uS ticks
int                           rawlen    // Number of records in rawbuf

OLED显示器相关功能包括:

void printChar                (char ch)
void printString              (char* pText)

我正在努力将接收到的IR值打印到OLED SSD1306屏幕上。用户能够查看并将接收到的代码保存到EEPROM,因此我尝试了所有不同的转换,但是我无法以显示接收的HEX代码的方式将结果打印到屏幕上(例如0xE0E040BF,这是三星电视开机。)

由于在attiny85中串行延迟,我不知道如何调试它并使其正常工作。有什么帮助吗?

编辑(添加相关代码):

#include "SSD1306.h"
#include "IRremote.h"
...
if (irrecv.decode(&results)) {  
    dumpCode(&results);        
    irsend.sendRaw(buff, results.rawlen, 38);
    oled.printString("Received IR");
    // Print received hexadecimal IR code to the OLED screen
    irrecv.enableIRIn();    
    irrecv.resume();   
}

2 个答案:

答案 0 :(得分:1)

如果我理解正确您只想将unsigned long值转换为十六进制字符串,则可以sprintf用于此目的(ideone):

const unsigned int BUFFER_LENGTH = 16;
char buffer[BUFFER_LENGTH];
unsigned long value = 0xE0E040BF;
sprintf(buffer, "0x%08X", value);
printf("%s\n", buffer); // printString(buffer)

这样您就可以将buffer传递给oled屏幕的printString方法。

格式说明符%08X指示printf以format的值作为十六进制数,大写字母始终显示4个字节的所有8个十六进制值,并用0填充它。

答案 1 :(得分:0)

你可以这样做:

int IR;
char hexadec_s[11];
sprintf(hexadec_s,"0x%08x",IR);
printString(hexadec_s);

我相信这应该可以解决问题。如果有效,请告诉我。