首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino未签名的长int to char*

Arduino未签名的长int to char*
EN

Stack Overflow用户
提问于 2016-05-14 15:16:14
回答 1查看 2.8K关注 0票数 1

我正在Attiny85上使用定制的IRremote和SSD1306库进行编码。

当接收到IR数据时,结果以如下方式存储:

代码语言:javascript
复制
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显示相关功能有:

代码语言:javascript
复制
void printChar                (char ch)
void printString              (char* pText)

我正在努力打印收到的红外值到有机发光二极管SSD1306屏幕。用户能够检查接收到的代码并将其保存到EEPROM,因此我尝试了所有不同的转换,但我无法将results.value打印到屏幕上,因为它会显示接收到的HEX代码(例如,三星电视中的Power on 0xE0E040BF )。

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

编辑(添加相关代码):

代码语言:javascript
复制
#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();   
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-14 15:28:13

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

代码语言:javascript
复制
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将值作为十六进制数字格式化,大写字母始终显示4个字节的所有8个十六进制值,并将其填充为0。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37228351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档